Fluent nhibernate fluent nHibernate子类的子类

Fluent nhibernate fluent nHibernate子类的子类,fluent-nhibernate,Fluent Nhibernate,我的模型如下所示: public class SelectionItem : BaseEntity // BaseEntity ==> id, timestamp stuff {//blabla} public class Size : SelectionItem {//blabla} public class Adultsize : Size {//blabla} public class SelectionItem : ClassMap<SelectionItem&

我的模型如下所示:

public class SelectionItem : BaseEntity // BaseEntity ==> id, timestamp stuff
{//blabla}

public class Size : SelectionItem
{//blabla}

public class Adultsize : Size
{//blabla}
    public class SelectionItem : ClassMap<SelectionItem>
    {
        public SelectionItem()
        {
            Id(x => x.Id);
            DiscriminateSubClassesOnColumn("SelectionItemType");
        }
    }

    public class Size : SubclassMap<Size>
    {
        public Size()
        {
             DiscriminatorValue("Size")
             DiscriminateSubClassesOnColumn("SizeType");
        }
    }

    public class Adultsize : SubclassMap<Adultsize>
    {
        public Adultsize()
        {
             DiscriminatorValue("Adult")
        }
  }
我想使用fluent nhibernate的每个表的类层次结构方法

public class SelectionItemMap : BaseEntityMap<Entities.SelectionItem.SelectionItem>
{
    public SelectionItemMap()
    {
        Map(x => x.Name);
        Map(x => x.Picture);
        Map(x => x.Code);
        DiscriminateSubClassesOnColumn("SelectionItemType");
    }
}
公共类SelectionItemMap:BaseEntityMap { public SelectionItemMap() { Map(x=>x.Name); 地图(x=>x.Picture); Map(x=>x.Code); DiscrimiteSubclassesoncolumn(“SelectionItemType”); } } 并重置以下子类上的DiscriminateSubClassesOnColumn:

public class SizeMap : SubclassMap<Size>
{
    DiscriminateSubClassesOnColumn("SizeType")
}

public Adultsize : SubclassMap<Adultsize>
{}
public类大小映射:子类映射
{
DiscriminateSubClassesOnColumn(“SizeType”)
}
公共成人规模:子类图
但根据resharper的说法,这种方法是贬值的


如何解决?感谢您提供更多信息。

当您使用“每表类层次结构”方法时,请使用一列作为鉴别器,然后为每个具体类定义该描述符的值

试着这样做:

public class SelectionItem : BaseEntity // BaseEntity ==> id, timestamp stuff
{//blabla}

public class Size : SelectionItem
{//blabla}

public class Adultsize : Size
{//blabla}
    public class SelectionItem : ClassMap<SelectionItem>
    {
        public SelectionItem()
        {
            Id(x => x.Id);
            DiscriminateSubClassesOnColumn("SelectionItemType");
        }
    }

    public class Size : SubclassMap<Size>
    {
        public Size()
        {
             DiscriminatorValue("Size")
             DiscriminateSubClassesOnColumn("SizeType");
        }
    }

    public class Adultsize : SubclassMap<Adultsize>
    {
        public Adultsize()
        {
             DiscriminatorValue("Adult")
        }
  }
公共类选择项:类映射
{
公共选择项()
{
Id(x=>x.Id);
DiscrimiteSubclassesoncolumn(“SelectionItemType”);
}
}
公共类大小:子类映射
{
公共规模()
{
鉴别器值(“大小”)
区分子类子列(“SizeType”);
}
}
公共类成人大小:子类映射
{
公众成人人数()
{
鉴别器值(“成人”)
}
}

这不起作用,DiscriminateSubClassesOnColumn()在子类映射中不可用。

您不需要在子类映射中添加DiscriminateSubClassesOnColumn()。它将类名作为鉴别器值

代码的正确版本

public class SelectionItem : ClassMap<SelectionItem>
{
    public SelectionItem()
    {
        Id(x => x.Id);
        DiscriminateSubClassesOnColumn("SelectionItemType");
    }
}

public class Size : SubclassMap<Size>
{
}

public class Adultsize : SubclassMap<Adultsize>
{
}
公共类选择项:类映射
{
公共选择项()
{
Id(x=>x.Id);
DiscrimiteSubclassesoncolumn(“SelectionItemType”);
}
}
公共类大小:子类映射
{
}
公共类成人大小:子类映射
{
}

Hi Torkel Thx很多。它就像一个符咒。只有一件事——我没有设置鉴别器值,fluent将类名作为鉴别器值。