gpt4 book ai didi

NHibernate 和集合类型

转载 作者:行者123 更新时间:2023-12-04 06:37:38 25 4
gpt4 key购买 nike

我正在尝试使用 Nhibernate 3.0 开发我的第一个项目。
我浏览了大量 Material (博客、论文和示例),我想我几乎可以理解基础知识。
我想我已经理解了不同类型集合的含义,但是当我看到 Internet 上的示例时,我认为我还没有真正理解。
该文档说,当您不想重复时应该使用 Set ,当您想要允许重复时应该使用 List/Bag 。
我发现的大多数示例都基于具有 Orders/OrderLines 的典型情况。
如果我查看订单的映射文件,我可以看到如下内容:

<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>

我曾期望看到映射为 Set 的 OrderItems;一个订单会有唯一的 OrderItems 吗?
我对吗?
同时,我希望为 Product 类找到一个映射,一袋 OrderItems
...  

<bag lazy="true" name="OrderItems">
<key foreign-key="FK_OrderItems_Products">
<column name="ProductCode" />
</key>
.....
</bag>

...

在这种情况下,产品将有一个非唯一的 OrderItem 列表。
有什么我想念的吗?
原谅我这个愚蠢的问题:-s

最佳答案

这样做的原因是包映射与 .NET 兼容 IList<T> Yads 回答的映射。集合通常以这种方式映射,以避免在您的类中引用 Iesi.Collections。

在 NHibernate 2.1 中,您可以通过将集合声明为 ICollection<T> 来使用集合映射。并将其初始化为 HashSet<T> .使用 NHibernate 3 我相信您可以将集合声明为 ISet<T> .

我同意大多数现实世界的集合应该映射为集合。

关于NHibernate 和集合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com