NHibernate ReferencesAny + Composite Id

时间:2013-12-03 09:59:18

标签: nhibernate interface fluent-nhibernate fluent-nhibernate-mapping composite-key

我有一个映射类,它通过映射中的ReferencesAny通过接口引用了许多其他类。 只要其他类具有普通的单列主键,这种方法就可以正常工作。 现在我需要通过相同的接口引用一个新类,它有一个组合的主键,由两列组成。

这可能吗?

Class1映射:

public class Class1Map : ClassMap<Class1>
{
  public Class1Map()
  {
    Table("Class1");

    Id(x => x.Id, "Id").GeneratedBy.Native().UnsavedValue(0);
  }
}

引用类映射:

public class RefClassMap : ClassMap<RefClassMap>
{
  public RefClassMap()
  {
    Table("RefClass");

    Id(x => x.Id, "Id").GeneratedBy.Native().UnsavedValue(0);

    ReferencesAny(x => x.Reference)
      .AddMetaValue<Class1>("Class1")
      .EntityTypeColumn("RefType")
      .EntityIdentifierColumn("RefId")
      .EnittyType<int>()
      .Cascade.None();
  }
}

(RefClass.Reference的类型为IInterface,Class1实现了IInterface)

这很有效,但是如何添加Class2作为可能的参考。 (Class2也实现了IInterface)

Class2映射如下所示:

public class Class2Map : ClassMap<Class2>
{
  public Class2Map()
  {
    Table("Class2");

    CompositeId()
      .KeyReference(x => x.KeyPart1, "KeyPart1")
      .KeyReference(x => x.KeyPart2, "KeyPart2")
      .Mapped();
  }
}

我不确定这是否可行,但可能是将entitytype更改为string并对复合键进行某种映射?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

缺乏答案和我自己的进一步研究表明这是不可能的。无论如何,我最终找到了解决方法。