2015-08-28 66 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型的每个对象以它的城市对象