NHibernate对现有对象的多对多映射

时间:2010-09-30 02:32:49

标签: c# .net nhibernate nhibernate-mapping many-to-many

我正在尝试创建一个多对多关系的问题。目标是保存客户以及允许他们购买哪些产品。这些产品并非客户所独有,在我们尝试将客户与客户关联之前,它们始终存在于数据库中。

我的关联映射目前看起来像......

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

如果我尝试保存客户,我会NHibernate.TransientObjectException引用该产品。我知道我可以添加级联到套装,但我从不想在保存客户时更新或保存产品,我们只想将客户映射到现有产品。

我应该注意,我正在尝试保存的客户来自webservice调用,因此不会引用先前已加载到会话中的产品。我想避免必须加载将映射到会话中的每个产品。

由于

2 个答案:

答案 0 :(得分:1)

您的代码应如下所示:

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

而不是你可能在做什么:

customer.AllowedProducts.Add(new Product {Id = productIdFromTheRequest});

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

答案 1 :(得分:0)

您必须将产品附加到休眠会话,以便它们成为管理实体。据我所知,没有其他出路。