2009-12-16 132 views
1

的我的模式是这样的:子类子类功能NHibernate

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

public class Size : SelectionItem 
{//blabla} 

public class Adultsize : Size 
{//blabla} 

我想用流利的NHibernate

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折旧的。

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

回答

0

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

正确版本的代码

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

public class Size : SubclassMap<Size> 
{ 
} 

public class Adultsize : SubclassMap<Adultsize> 
{ 
} 
1

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

尝试这样:

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

嗨Torkel THX了很多。它的工作就像一个魅力。 只是一件事 - 我没有设置鉴别器值,流利地将类名称作为鉴别器值。 – 2009-12-17 13:38:44

+0

嗨!这在FNH 1.1和1.0 RC中都不起作用。 – DaeMoohn 2010-07-07 06:56:10

1

这不起作用,DiscriminateSubClassesOnColumn()是不可用的SubclassMap。