我使用 Fluent NHibernate (1.2.0.712) 将每个层次结构表映射到现有数据库时遇到问题。这是简化的情况。
我的班级结构:
数据库结构:
所以基本上,我们有 1 个表(实体),其中包含一些特定数据(ID 和名称)+ 几个外键(到 ReferencedObject1 或 ReferencedObject2)。
抽象类 AbstractEntity 包含 Id 和 Name。ConcreteEntity1 和 ConcreteEntity2 是派生类。
我想根据数据库中的引用映射这些派生实例,所以如果有对 ReferencedObject1 的引用-> 它是 ConcreteEntity1 的一个实例。如果有对 ReferencedObject2 的引用 -> 它是 ConcreteEntity2 的一个实例。
一些代码:
public class AbstractEntity
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
public class ConcreteEntity1 : AbstractEntity
{
public virtual ReferencedObject1 ReferencedObject1 { get; set; }
}
public class ConcreteEntity2 : AbstractEntity
{
public virtual ReferencedObject2 ReferencedObject2 { get; set; }
}
public class AbstractEntityMap : ClassMap<AbstractEntity>
{
public AbstractEntityMap()
{
Table("Entities");
Id(e => e.Id);
Map(e => e.Name);
}
}
所以实际上我的问题是我应该如何映射派生类?我浏览了流利的 nhibernate wiki 并发现
如果你想做一个 table-per-class-hierarchy 策略,那么你只需要在 ClassMap 中指定鉴别器列。
但是,据我了解,我没有鉴别器列。我的情况是根据外键引用确定子类。
注意:对于多个鉴别器列,请使用 DiscriminateSubClassesOnColumn("").Formula([insert custom sql here])
我找不到公式用法的好例子。对我的情况有帮助吗?我有点困惑,也许我做错了什么?
有人可以帮我吗?提前致谢 :)