2009-12-16 107 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。