C# Nhibernate多对多:3表hbm映射
我有很多对很多的关系 表A、表B和表AB。 表AB将包括两列,A_Id和B_Id。。 主键必须来自两个列 多个B记录可以引用一个A记录。但是对于B中的每个记录,只有一个A记录是mutch HBM和POCO类中的正确语法是什么C# Nhibernate多对多:3表hbm映射,c#,nhibernate,orm,nhibernate-mapping,hbm,C#,Nhibernate,Orm,Nhibernate Mapping,Hbm,我有很多对很多的关系 表A、表B和表AB。 表AB将包括两列,A_Id和B_Id。。 主键必须来自两个列 多个B记录可以引用一个A记录。但是对于B中的每个记录,只有一个A记录是mutch HBM和POCO类中的正确语法是什么 提前感谢这是一个基于文档中非常清晰的示例的示例: ... ... 这就是C语言中的类# 公共A类 { 公共虚拟整数Id{get;set;} 公共虚拟IList Bs{get;set;} } 公共B级 { 公共虚拟整数Id{get;set;} 公共虚拟图书馆 或 与B
提前感谢这是一个基于文档中非常清晰的示例的示例:
...
...
这就是C语言中的类#
公共A类
{
公共虚拟整数Id{get;set;}
公共虚拟IList Bs{get;set;}
}
公共B级
{
公共虚拟整数Id{get;set;}
公共虚拟图书馆
或
与B只能有一个A的注释相关的更新
在这种情况下,我们不需要AB表。B应具有列A_Id,表示rela引用:
<class name="A" table="A" >
<id name="Id" column="A_Id" generator="native" />
<bag name="Bs" table="B" lazy="true">
<key column="A_Id">
<!-- not MANY but ONE-TO-Many -->
<one-to-many class="B" />
</bag>
...
</class>
<class name="B" table="B" >
<id name="Id" column="B_Id" generator="native" />
<many-to-one name="A" column="A_Id" />
...
</class>
...
...
实体
// This class is the same
public class A
{
public virtual int Id { get; set; }
public virtual IList<B> Bs { get; set; }
}
// here just a reference
public class B
{
public virtual int Id { get; set; }
public virtual A A { get; set; }
}
//这个类是相同的
公共A类
{
公共虚拟整数Id{get;set;}
公共虚拟IList Bs{get;set;}
}
//这里只是一个参考
公共B级
{
公共虚拟整数Id{get;set;}
公共虚拟A{get;set;}
}
问题是,要么是many-to-many
,表AB已经就位,要么不是。在这两者之间,我想说的是您可以使用CompositeId从多个列声明ID(例如:)我不想对一个表使用复合id。因为我对其他表关系使用id。谢谢。也许我不够清楚。A不是多对多。A可以有多个B记录引用一个A记录。但是对于B中的每个记录,只有一个A记录是mutch。对不起,我的错误。现在正确的语法是什么?谢谢。那么重点是,t我们不需要的帽子(取下)表格AB
。然后B表格将有A_Id
列,A的映射将类似,但B将使用我理解你的解决方案。但是要求是有AB表格,尽管我们可以按照你的建议做。那么我需要做什么?谢谢。我肯定会更倾向于使用A_Id
列作为o的一部分对于表B
。这是真正且非常有效的解决方案多对一
和一对多
(请参见我的更新答案),我只使用这种方法。几乎没有其他方法(没有多对多)。使用这种方法,您可以进行很好的预测和搜索。请参阅我的更新答案,这是该映射的草稿。如果您确实需要表AB…多对多是最合理的选择(有些人可以说我们可以使用),请在此处查看:
<class name="A" table="A" >
<id name="Id" column="A_Id" generator="native" />
<bag name="Bs" table="B" lazy="true">
<key column="A_Id">
<!-- not MANY but ONE-TO-Many -->
<one-to-many class="B" />
</bag>
...
</class>
<class name="B" table="B" >
<id name="Id" column="B_Id" generator="native" />
<many-to-one name="A" column="A_Id" />
...
</class>
// This class is the same
public class A
{
public virtual int Id { get; set; }
public virtual IList<B> Bs { get; set; }
}
// here just a reference
public class B
{
public virtual int Id { get; set; }
public virtual A A { get; set; }
}