【发布时间】:2010-08-12 13:29:26
【问题描述】:
我在 Fluent 中使用 Nhibernate,但遇到了继承问题。
这是我的数据库架构
表基
- IDBASE (PK)
- 字段1
- 类型
表 T1
- IDBASE(PK 和 FK)
- 字段2
- 字段3 ...
我的映射文件是:
public class BaseMap: ClassMap<BASE>
{
public BaseMap()
{
Id(x => x.Id, "IDBASE").GeneratedBy.Identity();
Map(x => x.Field1);
DiscriminateSubClassesOnColumn("TYPE");
}
}
public class T1Map: SubclassMap<T1>
{
public T1Map()
{
Table("T1");
KeyColumn("IDBASE");
DiscriminatorValue("T1");
Map(x => x.Field2).Not.Nullable();
Map(x => x.Field3).Not.Nullable();
}
}
我使用 FluentMappings 而不是 AutoMapping。
这里是我的实体:
public abstract class BASE
{
public virtual long IdBase{ get; set; }
public virtual string Field1 { get; set; }
}
public class T1: BASE
{
public virtual string Field2 { get; set; }
public virtual string Field3 { get; set; }
}
T1 实体继承自 BASE 实体,问题是当我尝试获取一行时 NHibernate 尝试在 Base Table 上选择 Field2 和 Field3 而它们应该在 T1 Table 上选择。
我已经尝试了几十个黑客,但它仍然不起作用,如果有人作为一个想法会非常有帮助。
非常感谢。
【问题讨论】: