51

我有一个沿着这条线的映射。

<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 表中不存在的值,因此它基本上破坏了参照完整性。因此,当我加载实体时,出现错误“不存在具有给定标识符的行”。如何配置映射以适应这种情况,这样它就不会在这种情况下死掉。

4

3 回答 3

81

好的,我找到了答案。添加

not-found="ignore"

属性的属性KeyField

<many-to-one name="KeyField" not-found="ignore" class="Model.Entities.Key, Model" column="field_id" />
于 2009-03-30T03:46:27.013 回答
5

在我的情况下,问题是因为 MyISAM 引擎没有强制执行外键约束,因此其中一行最终指向一个不存在的值,并且代理抛出了异常。在这种情况下,我建议检查您的数据集是否一致。

于 2013-06-27T11:04:28.093 回答
4

试试那个...

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!!!
        });
    });
}
于 2014-11-05T17:36:06.433 回答