NHibernate отображение многих ко многим существующим объектам - PullRequest
0 голосов
/ 30 сентября 2010

У меня проблемы с отношениями «многие ко многим», которые я пытаюсь создать. Цель состоит в том, чтобы спасти клиента и какие продукты им разрешено покупать. Продукты не являются уникальными для клиента и ВСЕГДА будут существовать в базе данных, прежде чем мы попытаемся связать с ними клиента.

Мое сопоставление для ассоциации в настоящее время выглядит как ...

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

Если я пытаюсь сохранить клиента, я получаю NHibernate.TransientObjectException ссылку на продукт. Я понимаю, что мог бы добавить каскад к набору, но я НИКОГДА не хочу обновлять или сохранять продукт при сохранении клиента, мы только хотим сопоставить клиента с существующими продуктами.

Я должен отметить, что клиент, которого я пытаюсь спасти, приходит от вызова веб-службы и поэтому не ссылается на продукты, которые ранее были загружены в сеанс. Я хотел бы избежать загрузки каждого продукта, который будет отображаться в сеансе.

Спасибо

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Ваш код должен выглядеть так:

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

Вместо того, что вы, вероятно, делаете:

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

Стоит отметить, что Load никогда идет в БД;он просто возвращает прокси (или извлеченный экземпляр, если он присутствует в текущем сеансе)

0 голосов
/ 30 сентября 2010

Вам нужно будет присоединить продукт к сеансу гибернации, чтобы он стал управляемым объектом.Насколько я знаю, другого выхода нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...