2012-05-14 6 views
1

Я недавно обновил свой проект до FNH 1.3.0.727 и NH 3.3.0.4000 через NuGet с версий 1.3.0.717 и 3.2.0.4000. Использование автокарты, сгенерированный XML до обновления выглядит следующим образом:Свободный ссылочный ключ автопилота NHibernate

<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])".

Я что-то упустил для новых версий?

ответ

0

Использование IReferenceConvention вместо переопределения GetKeyName в классе ForeignKeyconvention решило проблему.

0

Проблема заключается в сочетании конвенций и переопределений. Бывшая версия в каждом случае правильно отменяет ключевые столбцы (внешние, объединенные, hasmany, manytomany и т. Д.), Но теперь добавляет их. ошибка?

Смежные вопросы