1

我正在使用 Nhibernate 创建一个多对多的实现。目前我有以下课程。在这两个类中,我都实现了AddObjX(Objx obj)将项目添加到集合中的方法。

Obj1
{
  int id;
  Ilist<Obj2> obj2;
}

Obj2
{
  int id;
  Ilist<Obj1> obj1;
}

在我的映射中

HasManyToMany(x => x.Obj1)
   .Table("Obj1Obj2")
   .ParentKeyColumn("Obj1Id")
   .ChildKeyColumn("Obj2Id")
   .Inverse()
   .Cascade
   .SaveUpdate();

HasManyToMany(x => x.Obj2)
   .Table("Obj1Obj2")
   .ParentKeyColumn("Obj2Id")
   .ChildKeyColumn("Obj1Id")
   .Inverse()
   .Cascade
   .SaveUpdate();

当我现在说

obj1.AddObj2(obj2);
Session.SaveOrUpdate(obj1);

我只得到 obj1 -> obj2 之间的关联。因此,如果我检索 obj2,则没有与之耦合的 obj1。当我检索 obj1 时,有一个 obj2 与之耦合。

当我做

obj1.AddObj2(obj2);
obj2.AddObj1(obj1);
Session.SaveOrUpdate(obj1);

我在这两种情况下都有对象。这是设计的还是我错过了什么?

4

1 回答 1

3

您是否尝试Inverse过从第二个 HasManyToMany 中删除?

AFAIK 你应该只有一个逆,因为这指示 NH 映射的哪一侧负责插入。

请参阅northerdev 的这篇文章以及这篇后续文章

于 2013-04-15T13:36:52.167 回答