FluentNhibernate,将类映射到多个表

时间:2011-08-26 15:54:34

标签: c# .net nhibernate fluent-nhibernate mapping

考虑A,B和C类,A和B都有Cs的集合。我想将这些集合映射到不同的表,所以我有表A_C和B_C。我试着这样做:

public class AMap : ClassMap<A>
{    
    Public AMap()
    { 
       Id(x => x.Id).GeneratedBy.Identity();
       HasMany(x => x.Cs).Table("A_C"); 
    }  
}

public class BMap : ClassMap<B>
{    
    Public BMap()
    { 
       Id(x => x.Id).GeneratedBy.Identity();
       HasMany(x => x.Cs).Table("B_C"); 
    }  
}

public class CMap : ClassMap<C>
{    
    Public CMap()
    { 
       Id(x => x.Id).GeneratedBy.Identity();
    }  
}

..(带有一些额外的属性),但它仍然只创建一个名为“C”的表。那么正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

我会说,继续制作单独的表(不依赖于架构导出而自己)并按照您知道应该工作的方式正确配置映射。只要你正确配置了东西,NHibernate就应该解决问题。您可能必须告诉它要加入的键列的名称。您仍然可以使用模式导出来生成其他表。完成后,继续使用NHibernate并添加额外的表格。

public class AMap : ClassMap<A>
{    
    Public AMap()
    { 
       // ...
       HasMany(x => x.Cs).Table("A_C").KeyColumn("TheNameOfA'sPrimaryKeyColumn"); 
    }  
}

public class BMap : ClassMap<B>
{    
    Public BMap()
    { 
       // ...
       HasMany(x => x.Cs).Table("B_C").KeyColumn("TheNameOfB'sPrimaryKeyColumn"); 
    }  
}

NHibernate应该正确地进行连接。如果没有,请告诉我。此外,如果您正在处理复合键并需要帮助,请告诉我。