Fluent NHibernate自动映射参考键

Fluent NHibernate自动映射参考键,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我最近通过NuGet将我的项目从版本1.3.0.717和3.2.0.4000更新为FNH 1.3.0.727和NH 3.3.0.4000。使用automap,更新前生成的XML如下所示: <class xmlns="urn:nhibernate-mapping-2.2" name="APP.Domain.Module, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Module">

我最近通过NuGet将我的项目从版本1.3.0.717和3.2.0.4000更新为FNH 1.3.0.727和NH 3.3.0.4000。使用automap,更新前生成的XML如下所示:

  <class xmlns="urn:nhibernate-mapping-2.2" name="APP.Domain.Module, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Module">
    <id name="Id" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="ModuleId" />
      <generator class="guid.comb" />
    </id>
    <many-to-one class="APP.Domain.Product, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Product">
      <column name="ProductId" />
    </many-to-one>
    <joined-subclass name="APP.Domain.Audit.Trail, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
      <key>
        <column name="TrailId" />
      </key>
      <bag cascade="all" inverse="true" lazy="true" name="Arguments">
        <key>
          <column name="TrailId" />
        </key>
        <one-to-many class="APP.Domain.Audit.Argument, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      </bag>
      <property name="Action" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="Action" />
      </property>
      <property name="Date" type="System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="Date" />
      </property>
      <property name="Workflow" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="Workflow" />
      </property>
      <property name="Identity" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="[Identity]" />
      </property>
    </joined-subclass>
  </class>
更新后:

  <class xmlns="urn:nhibernate-mapping-2.2" name="APP.Domain.Module, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Module`">
    <id name="Id" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="ModuleId" />
      <generator class="guid.comb" />
    </id>
    <many-to-one class="APP.Domain.Product, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Product">
      <column name="ProductId" />
    </many-to-one>
    <joined-subclass name="APP.Domain.Audit.Trail, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
      <key>
        <column name="TrailId" />
        <column name="ModuleId" />
      </key>
      <bag cascade="all" inverse="true" lazy="true" name="Arguments">
        <key>
          <column name="TrailId" />
          <column name="TrailId" />
        </key>
        <one-to-many class="APP.Domain.Audit.Argument, APP.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      </bag>
      <property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="Name" />
      </property>
      <property name="Date" type="System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="Date" />
      </property>
      <property name="Workflow" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="Workflow" />
      </property>
      <property name="Identity" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <column name="[Identity]" />
      </property>
    </joined-subclass>
  </class>
我的模型中没有复合键,一切正常,现在我得到了异常外键FK4B9386BFF4D27734:参数[TrailId]必须与引用的主键Trail[TrailId,ModuleId]具有相同的列数


我是否缺少新版本的某些内容?

问题在于约定和覆盖的组合。以前的版本在每种情况下都会正确覆盖键列,如“外来”、“连接”、“hasmany”、“manytomany”等,但现在正在添加它们。bug?

使用IReferenceConvention替代ForeignKeyconvention类中的GetKeyName解决了问题