【发布时间】:2013-12-19 07:40:30
【问题描述】:
我有一个映射类,它通过在映射中使用 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();
}
}
我不确定这是否可行,但也许可以通过将实体类型更改为字符串并对复合键进行某种映射?
有什么建议吗?
【问题讨论】:
-
情况不一样。这是指使用复合键对象通过接口进行引用。
-
缺乏答案和我自己的进一步研究表明这是不可能的。无论如何,我最终找到了解决方法。
标签: nhibernate interface fluent-nhibernate fluent-nhibernate-mapping composite-key