我有一个Users表和一个Networks表,它们之间有多对多的关系(用户可能长到多个网络,网络可能包含很多用户)。多对多关系保存在“UserNetworks”表中,该表只有两列,UserId和NetworkId。
我的课程如下:
public class User
{
public IList<Network> Networks {get; set;}
}
public class Network
{
public IList<Usre> Users {get; set;}
}
这些多对多集合的NHibernate映射如下所示:
User.hbm.xml:
<bag name="Networks" table="UserNetworks" cascade="save-update" inverse="true">
<key column="UserId" />
<many-to-many class="Network" column="NetworkId" />
</bag>
Network.hbm.xml:
<bag name="Users" table="UserNetworks" cascade="save-update">
<key column="NetworkId" />
<many-to-many class="User" column="UserId" />
</bag>
在我的代码中,我在用户和网络之间创建了一个关联,如下所示:
user.Networks.Add(network);
network.Users.Add(user);
我希望SQL运行只是对UserNetworks表执行一次INSERT。相反,它使用NetworkID = X在UserNetworks表上执行DELETE,然后继续重新插入所有UserNetworks行以及新关联。
我做错了什么?
答案 0 :(得分:5)
行为是设计的。请参阅,NH不知道列表中的当前/新/删除的内容。所以通过删除所有并在列表中插入任何内容都是有意义的。