nhibernate - 如何使用接口(interface)将 composite-id 映射到流利的 nhibernate?

标签 nhibernate interface fluent-nhibernate fluent

我正在尝试将 .hbm 映射切换为流畅的映射,但复合 ID 的映射和接口(interface)的使用存在问题

类如下所示:

public class ClassWithCompositeId {
  public virtual IKeyOne KeyOne { get; set; }
  public virtual IKeyTwo KeyTwo { get; set; }
}

我们的 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>

请注意,我们在类中有接口(interface)!不,我正在尝试使用 Fluent nhibernate 映射它。

Map {
   public ClassWithCompositeIdMap() {
         CompositeId()
            .KeyReference(x => x.KeyOne, "colkeyone")
            .KeyReference(x => x.KeyTwo, "colkeytwo");
          ...
   }
}

但是现在 Fluent 生成的 Mapping 如下:

...
 <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>
...

“类”属性现在指向接口(interface)而不是导致错误的该接口(interface)的实现。

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

最佳答案

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

我相信它使用的语法类似于

 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");

关于nhibernate - 如何使用接口(interface)将 composite-id 映射到流利的 nhibernate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3997114/

相关文章:

c# - NHibernate映射异常: no persister for byte[]

asp.net-mvc - NHibernate与 Entity Framework [已关闭]

c# - 如何解决这个异常 "Could not find a setter for property ' ProductCode' in class ...”

nhibernate - 如何处理 NHibernate LINQ 空结果集?

java - 两个通用接口(interface)相互需要,如何正确实现它们?

JavascriptInterface Android 传递参数

c# - 将 MyGeneration 与 Fluent NHibernate 结合使用

NHibernate QueryOver子查询

c# - 公开基础库中定义的枚举类型

fluent-nhibernate - 使用 Fluent NHibernate 映射一个简单的元素集合