2010-05-15 3 views
1

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

<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

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

// EDIT

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

ответ

4

Как указать, какой продукт должен соответствовать 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> 
+0

спасибо, в отношении одного взаимно. Как «BasketItem» знает, что он должен соответствовать всем продуктам в basketItem.ProductId = product.Id. Я добавил несколько sql, которые могут сделать это ясным – frosty

+0

@frosty Ну, это именно то, что говорит сопоставление, и это именно работа NHibernate (вам может потребоваться добавить атрибут 'column' в' one-to-one ', если вы не используете NHibernate по умолчанию). Ты пробовал? –

+0

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

Смежные вопросы