NHibernate和集合类型
NHibernate和集合类型,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我正试图用Nhibernate 3.0开发我的第一个项目。 我已经阅读了大量的资料(博客、论文和样本),我认为我可以大致了解基本知识。 我想我已经理解了不同类型收藏的含义,但当我看到互联网上的例子时,我想我还没有真正理解。 文档中说,如果不需要重复项,则应使用集合;如果希望允许重复项,则应使用列表/包。 我发现的大多数示例都基于一种典型情况,即您有订单/订单行。 如果我查看订单的映射文件,我可以看到如下内容: <class name="OrderHeader" table=
我正试图用Nhibernate 3.0开发我的第一个项目。 我已经阅读了大量的资料(博客、论文和样本),我认为我可以大致了解基本知识。
我想我已经理解了不同类型收藏的含义,但当我看到互联网上的例子时,我想我还没有真正理解。
文档中说,如果不需要重复项,则应使用集合;如果希望允许重复项,则应使用列表/包。 我发现的大多数示例都基于一种典型情况,即您有订单/订单行。 如果我查看订单的映射文件,我可以看到如下内容:
<class name="OrderHeader"
table="Orders">
<id name="OrderId">
<generator class="hilo"/>
</id>
<property name="OrderDate"/>
<bag name="OrderItems" table="OrderDetails" cascade="all" inverse="true">
<key column="OrderId"/>
<one-to-many class="OrderDetail"/>
</bag>
</class>
<class name="OrderDetail"
table="OrderDetails">
<id name="DetailId">
<generator class="hilo"/>
</id>
<many-to-one name="ProductOrdered" column="ProductId"/>
<many-to-one name="Order" column="OrderId" />
</class>
我已导出以查看OrderItems映射为一个集合;订单将具有唯一的OrderItems?我说得对吗? 同时,我希望找到一个类Product的映射,即一包OrderItems
...
<bag lazy="true" name="OrderItems">
<key foreign-key="FK_OrderItems_Products">
<column name="ProductCode" />
</key>
.....
</bag>
...
。。。
.....
...
在这种情况下,产品将有一个非唯一订单项列表。我还缺什么吗?
请原谅我的愚蠢问题:-s大多数人将其实现为包的原因是他们可以使用内置列表类或IList接口来表示他们的集合。原因是包映射与Yads回答的.NET
IList
映射兼容。集合通常以这种方式映射,以避免在类中引用Iesi.Collections
使用NHibernate 2.1,您可以通过将集合声明为ICollection
并将其初始化为HashSet
来使用集合映射。使用NHibernate 3,我相信您可以将集合声明为ISet
<>我同意大多数真实世界的集合应该被映射为集合。< /P> < p>我将它设置为<代码> <代码>,如在我的书中,具有相同特性的两个命令行都是相同的(相等的应该返回true)。p> 是的,但是列表允许您有重复项,在这种情况下(订单行),您应该允许。您能解释一下吗?您可以有两个具有相同特征的订单行吗?我错过了一些东西…一张400美元的椅子=一张400美元的椅子。出于某些原因,许多客户希望在两个订单行之间拆分相同类型的产品,以解释某种关系。感谢您的解释,Goblin。感谢Jamie,这正是我所做的:我已将集合声明为ICollection并初始化为HashSet,因为我不想引用Iesi.Collections。