Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Nhibernate多对多:3表hbm映射_C#_Nhibernate_Orm_Nhibernate Mapping_Hbm - Fatal编程技术网

C# Nhibernate多对多:3表hbm映射

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

我有很多对很多的关系

表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只能有一个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; }
    }