У меня есть сопоставление по этому поводу.
<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, так что это в основном нарушает ссылочную целостность. Из-за этого при загрузке объекта я получаю сообщение об ошибке «Нет строки с данным идентификатором». Как мне настроить отображение для работы в этой ситуации, чтобы оно не умерло в этой ситуации.
3 ответа
Хорошо, я нашел ответ. Добавить
not-found="ignore"
Атрибут свойства KeyField
:
<many-to-one name="KeyField" not-found="ignore" class="Model.Entities.Key, Model" column="field_id" />
В моем случае проблема заключалась в том, что ограничение внешнего ключа не применялось механизмом MyISAM, и поэтому одна из строк в конечном итоге указывала на несуществующее значение, и прокси выдал исключение. В этом случае я бы рекомендовал проверить, что ваш набор данных согласован.
Попробуй это...
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!!!
});
});
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.