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表中的field_id有时在相关的key_field表中不存在一个值,所以基本上破坏了参照完整性。 正因为如此,当我加载实体时,我得到一个错误“没有行与给定的标识符存在”。 如何configuration映射来处理这种情况,这样就不会在这种情况下死亡。

好的,我find了答案。 添加

 not-found="ignore" 

属性KeyField属性:

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

在我的情况下,问题是因为MyISAM引擎不强制外键约束,因此其中一行最终指向一个不存在的值,代理引发exception。 我build议在这种情况下检查你的数据集是否一致。

试试…

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