Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc 使用NHibernate更新问题_Asp.net Mvc_Nhibernate_Fluent Nhibernate_Nhibernate Mapping - Fatal编程技术网

Asp.net mvc 使用NHibernate更新问题

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与CustomerGroup的比率为1:n,而Group与CustomerGroup的比率为1:n。在“创建客户”屏幕中,用户可以选择现有客户的组信息。所以,当我创建一个新客户时,我从现有客户中检索组并添加它们

///
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),它将被插入关联实体,而不会出现任何问题。这怎么可能?