Asp.net mvc 使用NHibernate更新问题
我有客户、客户组、组表。Customer与CustomerGroup的比率为1:n,而Group与CustomerGroup的比率为1:n。在“创建客户”屏幕中,用户可以选择现有客户的组信息。所以,当我创建一个新客户时,我从现有客户中检索组并添加它们Asp.net mvc 使用NHibernate更新问题,asp.net-mvc,nhibernate,fluent-nhibernate,nhibernate-mapping,Asp.net Mvc,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有客户、客户组、组表。Customer与CustomerGroup的比率为1:n,而Group与CustomerGroup的比率为1:n。在“创建客户”屏幕中,用户可以选择现有客户的组信息。所以,当我创建一个新客户时,我从现有客户中检索组并添加它们 /// Customer cust = new Customer(); foreach(var item in getothercustomergroups()) cust.groups.add(item); commit 这段代码生成updat
///
Customer cust = new Customer();
foreach(var item in getothercustomergroups())
cust.groups.add(item);
commit
这段代码生成update语句并使用新添加的customerid更新customergroups表,而不是使用新的customerid插入新记录。因此,所有具有prev的组。顾客走了。请任何人解释一下这种行为。根据您的描述,我猜getcustomergroups已经通过NHibernate从现有客户那里获得了customergroups。如果是这样,NHibernate将foreach循环中的每个项目与现有客户关联,因此当您向新客户添加项目时,新客户将承担该项目的所有权
您可以通过克隆项目来避免这种情况。见是的,似乎是这样。现在通过这种方式工作。客户客户=新客户();foreach(getgroupsofexistingcustomer(id)中的var项)cust.groups.add(newgroup(){name=“test”,desc=“test”});提交,但我对其他n:n关系的相同方法有疑问。我在映射中指定了一个表关联表,当我直接添加对象时,即不创建新对象,如order.items.add(item),它将被插入关联实体,而不会出现任何问题。这怎么可能?