Подтвердить что ты не робот

NHibernate, не существует строки с данным идентификатором

У меня есть отображение вдоль линий этого.

<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>

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

4b9b3361

Ответ 1

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

not-found="ignore"

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

<many-to-one name="KeyField" not-found="ignore" class="Model.Entities.Key, Model" column="field_id" />

Ответ 2

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

Ответ 3

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

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!!!
        });
    });
}