Subclass流式nHibernate的子类

时间:2009-12-16 16:12:59

标签: fluent-nhibernate

我的模型看起来像这样:

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

public class Size : SelectionItem
{//blabla}

public class Adultsize : Size
{//blabla}

我想使用流利的nhibernate的class-hierarchy-per-table-method

public class SelectionItemMap : BaseEntityMap<Entities.SelectionItem.SelectionItem>
{
    public SelectionItemMap()
    {
        Map(x => x.Name);
        Map(x => x.Picture);
        Map(x => x.Code);
        DiscriminateSubClassesOnColumn("SelectionItemType");
    }
}

并在以下子类上重置DiscriminateSubClassesOnColumn:

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

public Adultsize : SubclassMap<Adultsize>
{}

但这不起作用。

我在网上找到了一个解决方案:link text 但这种方法根据resharper折旧。

如何解决?感谢您提供进一步的信息。

3 个答案:

答案 0 :(得分:1)

当你使用class-hierarchy-per-table-method时,使用一列作为鉴别器,然后为每个具体类定义该descriminator的值。

尝试这样的事情:

    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")
        }
  }

答案 1 :(得分:1)

这不起作用,DiscriminateSubClassesOnColumn()在SubclassMap中不可用。

答案 2 :(得分:0)

您不需要在SubclassMap中添加DiscriminateSubClassesOnColumn()。它将classname作为鉴别器值。

更正代码版本

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

public class Size : SubclassMap<Size>
{
}

public class Adultsize : SubclassMap<Adultsize>
{
}