nhibernate: отображение один на один - PullRequest
1 голос
/ 15 мая 2010

У меня есть следующая карта. Я хочу привязать BasketItem к классу "Продукт". Таким образом, в основном, когда я перебираю корзину, я могу получить название продукта

<class name="BasketItem" table="User_Current_Basket">
<id name="Id" type="Int32" column="Id" unsaved-value="0">
<generator class="identity"/>
</id>
<property name="ProductId" column="Item_ID" type="Int32"/>
  <one-to-one   name="Product"
        class="Product"></one-to-one>
</class>

Как указать, что продукт должен соответствовать BasketItem.ProductId с Product.Id

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

// РЕДАКТИРОВАТЬ

select * from BasketItem
inner join Products on BasketItem.Item_ID = Products.Item_ID

1 Ответ

4 голосов
/ 15 мая 2010

Как указать, что продукт должен соответствовать BasketItem.ProductId с Product.Id

Ваш BasketItem должен удерживать Product на уровне объекта, а не ProductId. И отображение должно быть:

<class name="BasketItem" table="User_Current_Basket">
  <id name="Id" type="Int32" column="Id" unsaved-value="0">
    <generator class="identity"/>
  </id>
  <one-to-one name="Product" class="Product"/>
</class>

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

Если вы хотите загружать Product лениво, предпочитайте «поддельные» многие-к-одному:

<class name="BasketItem" table="User_Current_Basket">
  <id name="Id" type="Int32" column="Id" unsaved-value="0">
    <generator class="identity"/>
  </id>
  <many-to-one name="Product" class="Product"/>
</class>
...