C# 使用nhibernate持久化三个相关表
我们有三张桌子A、B、C 纵队 A=>id,x B=>id,y C=>A.id,B.id A中的每一行都会有B中的一行。 为了关联A和B,我们使用C,我们不能更改表格设计。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
我们必须在一个事务中保存信息。有没有一种使用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>