У меня есть сопоставление по этому поводу.

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model.Entities" schema="etl" assembly="Model" default-lazy="false">
  <class name="Model.Entities.DataField, Model" table="mdm_field">
    <id name="FieldId" column="field_id" type="int">
      <generator class="native" />
    </id>
    <many-to-one name="KeyField" class="Model.Entities.Key, Model" column="field_id" />
  </class>
</hibernate-mapping>

Теперь в базе данных field_id в таблице mdm_field иногда имеет значение, которого нет в связанной таблице key_field, так что это в основном нарушает ссылочную целостность. Из-за этого при загрузке объекта я получаю сообщение об ошибке «Нет строки с данным идентификатором». Как мне настроить отображение для работы в этой ситуации, чтобы оно не умерло в этой ситуации.

51
Craig 30 Мар 2009 в 07:37
У меня такое же сопоставление, вы знаете, как найти все модели без KeyField?
 – 
Andrey Selitsky
18 Май 2010 в 13:50

3 ответа

Лучший ответ

Хорошо, я нашел ответ. Добавить

not-found="ignore"

Атрибут свойства KeyField:

<many-to-one name="KeyField" not-found="ignore" class="Model.Entities.Key, Model" column="field_id" />
81
Răzvan Flavius Panda 25 Янв 2015 в 14:43
2
Это меня тоже сбило с толку. Для аннотаций используйте @NotFound (action = NotFoundAction.IGNORE).
 – 
NobodyMan
9 Ноя 2010 в 02:23
5
У меня аналогичная проблема с Fluent NHibernate. Тед, если бы ты мог указать на правильное решение, я был бы очень признателен. FWIW, размещение .NotFound.Ignore () в KeyField в любом случае не помогло в моем случае.
 – 
BobC
22 Дек 2011 в 02:30
1
Уточните, почему это не подходящее решение?
 – 
The_Butcher
15 Авг 2012 в 11:32
1
Тед прав, поскольку установка «not-found = ignore» не вызывает исключения, но избавляет от ленивой инициализации! Вы хотите выбрать 10000 раз, если у вас есть список из 10000 элементов?
 – 
Stefano.net
19 Сен 2012 в 20:12
Помимо, вероятно, не оптимального решения, это не сработало для меня с использованием свободного NHibernate NotFound.Ignore () на сопоставлении.
 – 
Rev
11 Дек 2012 в 15:29

В моем случае проблема заключалась в том, что ограничение внешнего ключа не применялось механизмом MyISAM, и поэтому одна из строк в конечном итоге указывала на несуществующее значение, и прокси выдал исключение. В этом случае я бы рекомендовал проверить, что ваш набор данных согласован.

5
Shagglez 27 Июн 2013 в 15:04
Спасибо за Ваш ответ! Это фактически решило проблему, вместо того, чтобы ее обойти.
 – 
apires
12 Июн 2018 в 01:01

Попробуй это...

public void Override(ModelMapper modelMapper) {
    modelMapper.Class<T>(c => { 
        c.ManyToOne(m => m.FKObj, r => {
            r.Column("FKColumn");
            r.NotFound(NotFoundMode.Ignore); // THIS IS IMPORTANT!!!
        });
    });
}
5
Rodolpho Brock 5 Ноя 2014 в 20:36