2015-08-28 92 views
0

繼承映射修改數據庫結構,我有三個對象A,B和市,其中B繼承A.與功能NHibernate

A包含的ID和該結構的名稱。

internal class AMap : ClassMap<A> 
{ 
    internal AMap() 
    { 
     Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable(); 
     Map(x => x.Name).Length(255); 
     Table("A"); 
    } 
} 

乙應該擴展對象包含城市對象的列表

internal class BMap : SubclassMap<B> 
{ 
    internal BMap() 
    { 
     HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All(); 
    } 
} 

這應導致以下數據庫結構
Table A: - ID - Name

Table B: - ID_A - ID_City

它應該是一個ManyToMany關係,所以ID_A和ID_City可以發生多次i n表B

如何在Fluent NHibernate映射中實現這種結構?

感謝, 異種

+0

是表B的中間體表多對多的關係? – Suhas

+0

@Suhas是的 – Xenogenesis

回答

0

我能解決這個問題,所以這是很頭疼的結果:

internal class AMap : ClassMap<A> 
{ 
    internal AMap() 
    { 
     Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable(); 
     Map(x => x.Name).Length(255); 

     Map(x => x.Type).Column("ObjType"); 
     DiscriminateSubClassesOnColumn(@"Type"); 

     Table("A"); 
    } 
} 

internal class BMap : SubclassMap<B> 
{ 
    internal BMap() 
    { 
     HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All(); 
    } 
} 

我添加了一個類型字段,用於標識每個子類,那麼DiscriminateSubClassesOnColumn將對象的類型信息存儲在A表中。

的B-表不存在了,但有一個映射表爲B型的每個對象以它的城市對象