Fluent nhibernate 自由基继承问题
我在使用Fluent的Nhibernate时遇到了继承问题 这里是我的数据库模式 桌座Fluent nhibernate 自由基继承问题,fluent-nhibernate,Fluent Nhibernate,我在使用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 =&g
- IDBASE(PK)
- 字段1
- 类型
- 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();
}
}
T1实体继承自基本实体,问题是当我尝试获取一行时,NHibernate尝试在基本表上选择Field2和Field3,而它们应该在T1表上选择
我已经尝试了几十种破解方法,但仍然不起作用,如果有人认为这是一个非常有用的主意的话
非常感谢。您正在指定一个鉴别器,这意味着继承结构应该是每个类层次结构的表;使用此设置,您将不会有两个表,您将有一个表,其中包含所有内容(因此,select会针对所有列命中同一个表)
如果删除
DiscriminateSubclassesOnColumn
调用,则会将映射放入每个类的表中,这样就可以得到所需的结构。实际上,我确实需要DiscriminateSubclassesOnColumn
,因此我找到了另一个解决方案,在继承的实体中,我使用连接进行映射,如下所示:
public class T1Map: SubclassMap<T1>
{
public T1Map()
{
Join("T1", y =>
{
y.KeyColumn("IDBASE");
y.Map(x => x.Field2).Not.Nullable();
y.Map(x => x.Field3).Not.Nullable();
});
}
}
公共类T1Map:子类map
{
公共地图()
{
加入(“T1”,y=>
{
y、 键列(“IDBASE”);
y、 Map(x=>x.Field2).Not.Nullable();
y、 Map(x=>x.Field3).Not.Nullable();
});
}
}
它工作得很好,我可以在基类上保留Discriminator列
谢谢
public class T1Map: SubclassMap<T1>
{
public T1Map()
{
Join("T1", y =>
{
y.KeyColumn("IDBASE");
y.Map(x => x.Field2).Not.Nullable();
y.Map(x => x.Field3).Not.Nullable();
});
}
}