Skip to main content
 首页 » 编程设计

c#之休眠 : One to One mapping

2024年02月24日32leader

我有以下 map 。我希望将 BasketItem 映射到类“Product”。所以基本上,当我遍历购物篮时,我可以获得产品名称

<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 

请您参考如下方法:

How do specifiy that product should match BasketItem.ProductId with 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> 

Also i've read that i should avoid one-to-one and just use one-to-many? If i was to do that how do i ensure i just get one product and not a collection.

如果您希望能够延迟加载 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>