Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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
C# NHibernate多对多映射到现有对象_C#_.net_Nhibernate_Nhibernate Mapping_Many To Many - Fatal编程技术网

C# NHibernate多对多映射到现有对象

C# NHibernate多对多映射到现有对象,c#,.net,nhibernate,nhibernate-mapping,many-to-many,C#,.net,Nhibernate,Nhibernate Mapping,Many To Many,我正试图建立一种多对多的关系,我遇到了一些问题。我们的目标是拯救一个客户以及允许他们购买哪些产品。产品不是客户独有的,在我们尝试将客户与产品关联之前,产品将始终存在于数据库中 我的关联映射当前看起来像 <set name="AllowedProducts" table="Customer_AllowedProducts"> <key column="CustomerId"></key> <many-to-many class="P

我正试图建立一种多对多的关系,我遇到了一些问题。我们的目标是拯救一个客户以及允许他们购买哪些产品。产品不是客户独有的,在我们尝试将客户与产品关联之前,产品将始终存在于数据库中

我的关联映射当前看起来像

<set name="AllowedProducts" table="Customer_AllowedProducts">
      <key column="CustomerId"></key>
      <many-to-many class="Product" column="ProductId"/>
</set>

如果我试图保存一个客户,我会得到一个引用该产品的
NHibernate.transientObject异常。我知道我可以将cascade添加到集合中,但在保存客户时,我从不想更新或保存产品,我们只想将客户映射到现有产品

我应该注意,我试图保存的客户来自webservice调用,因此没有引用以前加载到会话中的产品。我希望避免加载将映射到会话中的每个产品


谢谢

您必须将产品连接到hibernate会话,以便它们成为托管实体。据我所知,没有其他出路。

您的代码应该是这样的:

customer.AllowedProducts.Add(session.Load<Product>(productIdFromTheRequest));

值得注意的是,
加载
从不进入数据库;它只返回一个代理(或者一个检索到的实例,如果当前会话中存在的话)

而我发现负载将被转移到DB(可能是我需要解决的其他问题,lazy不=true产品映射)。这完全解决了主要问题。谢意几乎不应该是虚假的;如果是,那就是你的问题。
customer.AllowedProducts.Add(new Product {Id = productIdFromTheRequest});