3

我想在一個級別有一個表和一個表在另一個級別的層次結構。 這可能嗎?流利的NHibernate兩個級別繼承問題

介紹在這裏 - >

我有這些類:

public class BaseItem 
{ 
    public int Id{ get; set; } 
} 
public class Item : BaseItem 
{ 
} 
public class Child1 : Item 
{ 
} 
public class Child2 : Item 
{ 
} 

我想有 「BaseItem」 和 「項目」 表,而不是 「Child1」 和 「CHILD2」

我試試這個映射:

public class BaseItemMap : ClassMap<BaseItem> 
{ 
    public BaseItemMap() 
    { 
     Id(p => p.Id).Column("BaseItemId"); 
    } 
} 
public class ItemMap : SubclassMap<Item> 
{ 
    public Item() 
    { 
     KeyColumn("BaseItemId"); 

     //note: this line does not compiled 
     //  because "ItemMap" should be of "SubclassMap" and 
     //  I can not use "ClassMap"! 
     DiscriminateSubClassesOnColumn("ItemType"); 
    } 
} 
public class Child1Map : SubclassMap<Child1> 
{ 
    public BuildingNewsMap() 
    { 
     DiscriminatorValue(@"Child1"); 
    } 
} 
public class Child2Map : SubclassMap<Child2> 
{ 
    public BuildingNewsMap() 
    { 
     DiscriminatorValue(@"Child2"); 
    } 
} 

請幫助我!

回答

1

有點尷尬,但確實有效。我包括一些屬性以顯示它們的映射

public class BaseItem 
{ 
    public virtual int Id { get; protected set; } 
    public virtual DateTime Created { get; set; } 
} 
public class Item : BaseItem 
{ 
    public virtual string Name { get; set; } 
} 
public class Child1 : Item 
{ 
    public virtual int Property1 { get; set; } 
} 
public class Child2 : Item 
{ 
    public virtual int Property2 { get; set; } 
} 

public class ItemMap : ClassMap<Item> 
{ 
    public ItemMap() 
    { 
     Id(p => p.Id).Column("BaseItemId").GeneratedBy.HiLo("100"); 

     Join("BaseItemTable", join => 
     { 
      join.KeyColumn("BaseItemId"); 
      join.Map(x => x.Created); 
     }); 

     DiscriminateSubClassesOnColumn("ItemType"); 
    } 
} 

public class Child1Map : SubclassMap<Child1> 
{ 
    public Child1Map() 
    { 
     DiscriminatorValue("Child1"); 

     Map(x => x.Property1); 
    } 
} 
public class Child2Map : SubclassMap<Child2> 
{ 
    public Child2Map() 
    { 
     DiscriminatorValue("Child2"); 

     Map(x => x.Property2); 
    } 
}