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

我在使用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();
        }
    }
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();
        }); 
    }
}