如何使用接口将复合id映射到fluent nhibernate?

如何使用接口将复合id映射到fluent nhibernate?,nhibernate,interface,fluent-nhibernate,fluent,Nhibernate,Interface,Fluent Nhibernate,Fluent,我正试图将.hbm映射切换到fluent映射,但复合ID的映射和接口的使用存在问题 该类如下所示: public class ClassWithCompositeId { public virtual IKeyOne KeyOne { get; set; } public virtual IKeyTwo KeyTwo { get; set; } } ... <composite-id mapped="false" unsaved-value="undefined">

我正试图将
.hbm
映射切换到fluent映射,但复合ID的映射和接口的使用存在问题

该类如下所示:

public class ClassWithCompositeId {
  public virtual IKeyOne KeyOne { get; set; }
  public virtual IKeyTwo KeyTwo { get; set; }
}
...
 <composite-id mapped="false" unsaved-value="undefined">
      <key-many-to-one name="KeyOne" class="company.namespace.IKeyOne, Interfaces, Version=0.1.4.3379, Culture=neutral, PublicKeyToken=null">
        <column name="colkeyone" />
      </key-many-to-one>
      <key-many-to-one name="KeyTwo" class="company.namespace.IKeyTwo, Interfaces, Version=0.1.4.3379, Culture=neutral, PublicKeyToken=null">
        <column name="colkeytwo" />
      </key-many-to-one>
    </composite-id>
...
我们的hbm映射如下所示:

<hibernate-mapping ...>
   <class name="ClassWithCompositeId" table="t_classwithcompositeid">
      <composite-id>      
         <key-many-to-one name="KeyOne" column="colkeyone" class="company.namespace.boSkillBase, BL_Stammdaten" />
         <key-many-to-one name="KeyTwo" column="colkeytwo" class="boQualifikation" />         
      </composite-id>
</hibernate-mapping>
但现在Fluent生成的映射如下所示:

public class ClassWithCompositeId {
  public virtual IKeyOne KeyOne { get; set; }
  public virtual IKeyTwo KeyTwo { get; set; }
}
...
 <composite-id mapped="false" unsaved-value="undefined">
      <key-many-to-one name="KeyOne" class="company.namespace.IKeyOne, Interfaces, Version=0.1.4.3379, Culture=neutral, PublicKeyToken=null">
        <column name="colkeyone" />
      </key-many-to-one>
      <key-many-to-one name="KeyTwo" class="company.namespace.IKeyTwo, Interfaces, Version=0.1.4.3379, Culture=neutral, PublicKeyToken=null">
        <column name="colkeytwo" />
      </key-many-to-one>
    </composite-id>
...
。。。
...
“Class”属性现在指向接口,而不是导致错误的该接口的实现

如何告诉Fluent nHibernate使用另一个类作为属性值?

尝试下载。它读取数据库模式并生成流畅的映射和类等。虽然所有代码可能不是您所需要的,但它应该从正确的方向开始,因为它支持复合键,并将它们表示为脱离主实体的单独类

我相信它使用的语法与

 CompositeId()
            .ComponentCompositeIdentifier(x => x.Key, "Namespace.Key, Assembly")
            .KeyProperty(x => x.Key.Id1, "Id1")
            .KeyProperty(x => x.Key.Id2, "Id2")
            .KeyProperty(x => x.Key.Id3, "Id3");

坦克!但我在我的电脑上找到了答案。事实上,我发现fluent nHibernate中缺少一个功能。Paul Batum已经将该特性添加到开发分支中

您可以这样使用它:

   Map {
      public ClassWithCompositeIdMap() {
            CompositeId()
               .KeyReference(x => x.KeyOne, k =>
                   k.Type<KeyOneImplementation>(), "colkeyone")
               .KeyReference(x => x.KeyTwo, k =>
                   k.Type<KeyTwoImplementation>(), "colkeytwo");
             ...
      }
   }
Map{
公共类WithCompositeIDMap(){
复合ID()
.KeyReference(x=>x.KeyOne,k=>
k、 类型(),“colkeyone”)
.KeyReference(x=>x.KeyTwo,k=>
k、 类型(),“colkeytwo”);
...
}
}


您可以在此处看到原始对话:

对不起,boQualifikation和boSkill类应该是IKeyOne和IKeyTwoNhGen的实现,听起来不错,但SF上没有相关文件:(