[英]Fluent NHibernate automap reference key
我最近通過NuGet將項目從1.3.0.717和3.2.0.4000更新到了FNH 1.3.0.727和NH 3.3.0.4000。 使用自動映射,更新之前生成的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>
我的模型中沒有組合鍵,一切正常,現在我開始感到異常"Foreign key (FK4B9386BFF4D27734:Argument [TrailId])) must have same number of columns as the referenced primary key (Trail [TrailId, ModuleId])"
。
我是否缺少新版本的內容?
問題在於約定和替代的組合。 以前的版本在每種情況下(外部,聯合,hasmany,mantomany等)均會正確覆蓋鍵列,但現在正在添加它們。 蟲子?
使用IReferenceConvention代替在ForeignKeyconvention類中重寫GetKeyName可以解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.