Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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持久化三个相关表_C#_.net_Nhibernate - Fatal编程技术网

C# 使用nhibernate持久化三个相关表

C# 使用nhibernate持久化三个相关表,c#,.net,nhibernate,C#,.net,Nhibernate,我们有三张桌子A、B、C 纵队 A=>id,x B=>id,y C=>A.id,B.id A中的每一行都会有B中的一行。 为了关联A和B,我们使用C,我们不能更改表格设计。 我们必须在一个事务中保存信息。有没有一种使用NHibernate的方法可以做到这一点?我从来没有这样做过,但您可能想看看如何使用一些联接表映射 对于事务性操作,只需: using(var session = TheSessionFactory.OpenSession()) { using(var txn = sess

我们有三张桌子A、B、C

纵队

A=>id,x

B=>id,y

C=>A.id,B.id

A中的每一行都会有B中的一行。 为了关联A和B,我们使用C,我们不能更改表格设计。
我们必须在一个事务中保存信息。有没有一种使用NHibernate的方法可以做到这一点?

我从来没有这样做过,但您可能想看看如何使用一些联接表映射

对于事务性操作,只需:

using(var session = TheSessionFactory.OpenSession()) {
    using(var txn = session.BeginTransaction()) {
        //transactional work
        txn.Commit();
    }
}

这取决于你的类结构是什么,或者你在类结构中寻找什么。如果这些确实是表中唯一的列,那么这种方式似乎有点过分了,导致访问X&Y classC.A.X&classC.B.X的方式不太理想,但它会起作用。也许您可以在ClassC上有一些未保存的属性,以更简洁的方式进行这些调用

<class name="ClassA" table="A">
   <id name="Id" column="ID">
      <generator class="native"/>
   </id>
   <property name="x" column="X" />
</class>

<class name="ClassB" table="B">
   <id name="Id" column="ID">
      <generator class="native"/>
   </id>
   <property name="y" column="Y" />
</class>

<class name="ClassC" table="C">
   <id name="Id" column="ID">
      <generator class="native"/>
   </id>
   <many-to-one name="A" class="ClassA" column="A_ID"/>
   <many-to-one name="B" class="ClassB" column="B_ID"/>
</class>

如果C只有这些列,您可以将其更改为使用组合id来查看。然后,也取决于您的需要,您可以设置级联,这样您就只会在CRUD出现时使用ClassC

这里描述的是多对多表映射。存在多对多映射属性。这意味着您不需要表C的映射

借用Mark G的答案中的映射

<class name="ClassA" table="A">
   <id name="Id" column="ID">
      <generator class="native"/>
   </id>
   <property name="x" column="X" />
   <bag name="List_Of_B" table="C" cascade="all">
      <key column="AId"/>
      <many-to-many column="BId"
         class="B"/>
   </bag>
</class>

<class name="ClassB" table="B">
   <id name="Id" column="ID">
      <generator class="native"/>
   </id>
   <property name="y" column="Y" />
   <bag name="List_Of_A" table="C" cascade="all">
      <key column="BId"/>
      <many-to-many column="AId"
         class="A"/>
   </bag>
</class>