如何在 NHibernate 中映射 Collection

2023-12-30

我有一个联系人类(基类)、一个名为“客户”的类和一个名为“供应商”的类。客户和供应商类都派生自联系人。

客户与订单有 0..n 关系。我想要在客户上有一个 Collection 属性,并将其在 NHibernate 中映射到其相应的表。

在 NHibernate(版本 2.0.1 GA)中这是如何完成的?

(ps:使用.NET 3.5 SP1、VS2008 SP1)


这是这样完成的:

像这样创建你的类:

public class Customer  : Contact
{
   private ISet<Order> _orders = new HashedSet<Order>();

   public Collection<Order> Orders
   {
      return new List<Order>(_orders);
   }

   // NOrmally I would return a ReadOnlyCollection<T> instead of a Collection<T>
   // since I want to avoid that users add Orders directly to the collection.
   // If your relationship is bi-directional, then you have to set the other
   // end of the association as well, in order to hide this for the programmer
   // I always create add & remove methods (see below)

   public void AddOrder( Order o )
   {
      if( o != null && _orders.Contains(o) == false )
      {
         o.Customer = this;
         _orders.Add(o);
      }
   }
}

在您的映射中,您指定:

<set name="Orders" table="OrdersTable" access="field.camelcase-underscore" inverse="true">
   <key column="..." />
   <one-to-many class="Order" .. />
</set>

由于您使用继承,您绝对应该看看 NHibernate 中继承映射的不同可能性,并选择最适合您情况的策略:继承映射 http://www.nhforge.org/doc/nh/en/index.html#inheritance

关于 set 和 bag 语义: - 当您将集合映射为集合时,您可以确保映射集合中的所有实体都是唯一的。也就是说,NHibernate 将确保在重建实例时,集合不会包含重复项。 - 当您将集合映射为包时,从数据库加载对象时,您的集合可能会多次包含相同的实体。

  • Set 是不同的集合 对象被视为一个整体。 A 一组(字母)的有效示例 是:{a,b,c,d}。每个字母 恰好发生一次。
  • Bag 是一个集合的概括。 A 一个包的成员可以拥有多于 一个会员资格,而每个会员 set 只有一个成员资格。一个有效的 袋子的例子是 { a, a, a, b, c, 光盘, ...}。字母a和c 多次出现在袋子中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NHibernate 中映射 Collection? 的相关文章

随机推荐

  • 删除测试期间生成的 id

    对于负载测试vu阶段我生成了很多具有唯一 ID 的对象 并将它们放入数据库中 我想在期间删除它们teardown阶段以免污染数据库 当保持这样的状态时 let ids export function setup ids push put i
  • 实现大型文本文件阅读器的最佳策略

    我们有一个应用程序将其处理步骤记录到文本文件中 这些文件在实施和测试期间用于分析问题 每个文件的大小最大为 10MB 最多包含 100 000 行文本 目前 对这些日志的分析是通过打开文本查看器 Notepad 等 并根据问题查找特定字符串
  • ctypes 与 _ctypes - 为什么后者存在?

    我最近了解到Python不仅有一个名为ctypes 其中有一个文档页面 https docs python org library ctypes html 还有一个名为 ctypes which doesn t https docs pyt
  • Android 无需 USB 调试

    我使用 Eclipse 我想使用我的设备调试我的应用程序 但又不损坏其电池 因为我应该始终在电池尚未放电时为其充电 是否可以在不通过 USB 连接的情况下将设备连接到 adb 我尝试使用 logcat 应用程序 但有点不舒服 我搜索了一个不
  • Rails STI,子类除非使用否则不会显示?

    我正在使用 Rails STI 对复杂域进行建模 在视图中 我列出了所有子类 gt li gt li 目的是最终使子类的每个标签都成为指向该子类实例的单独 索引 页面的链接 这使我不必自己拥有所有可能的子类的列表 如果我添加更多子类 则稍后
  • 在 Jest 中调试内存泄漏需要遵循哪些步骤?

    我在 Jest 中的测试似乎正在泄漏 调试此类问题的建议步骤是什么 我对这类问题很陌生 正如你所看到的 我尝试过传入Jest 中记录的选项 https jestjs io docs en cli html forceExit detectO
  • 是否可以在 Haskell 中创建 PHP 扩展?

    是否可以使用 Haskell 创建 PHP 扩展 通常 PHP 扩展是使用 C 编写的 使用 Haskell FFI 为存根 C 扩展提供功能是否可行 甚至是一个好主意 这种方法有哪些注意事项 Zend 是否会在后台施展一些魔法来破坏这样的
  • PhoneGap 电子邮件撰写器插件

    我构建了一个简单的基于 jQuery Mobile 的应用程序 并尝试使用 Phonegap 对其进行编译 我希望用户能够通过电子邮件从应用程序发送一些内容 但我无法弄清楚这一点 My code
  • 使用 Python 在 Windows 上获取目录所有权会导致“访问被拒绝”错误

    我正在尝试使用以下代码获取目录的所有权 sd win32security SECURITY DESCRIPTOR sd SetSecurityDescriptorOwner curUser False win32security SetFi
  • 初始化 UIGestureRecognizer 作为 Swift 中属性定义的一部分?

    我想初始化一个UIPanGestureRecognizer作为一个UIViewController的属性定义 这样我就不必将其声明为可选 如果初始化仅发生在viewDidLoad 以下两次尝试都在编译时失败 我使用的是最新版本的 Xcode
  • 使用asp.net登录控制的部分站点SSL

    我正在尝试将本地登录系统转换为 net 中包含的标准asp net 登录控件 我希望未登录用户在网站上的所有通信都以明文形式进行 但一旦用户登录 就将所有内容锁定在 SSL 中 包括用户名和密码的传输 我之前通过加载第二个页面 logina
  • 具有嵌套列的 Apache Spark 窗口函数

    我不确定这是一个错误 或者只是语法不正确 我四处搜寻 没有看到其他地方提到这一点 所以我在提交错误报告之前在这里询问 我正在尝试使用在嵌套列上分区的窗口函数 我在下面创建了一个小示例来演示该问题 import sqlContext impl
  • SwiftUI:如何在工作表关闭后显示警报?

    我试图显示由模式表触发的警报 这是一个小型演示项目 import SwiftUI struct ContentView View State private var showSheet false State private var sho
  • InvalidStateStoreException:状态存储未在 Kafka 流中打开

    StreamsBuilder builder new StreamsBuilder Map
  • 是否支持小写“dockerfile”文件名以及支持多久了?

    我注意到我可以使用 dockerfile 和小写 d 我有一个客户 他对我们在 dockerfile 上使用小写 d 而不是大写 Dockerfile 提交的解决方案感到非常沮丧 显然 Docker 允许使用小写 d 因为它不会给我任何错误
  • 如何在一个 get 请求中返回多个 Mongoose 集合?

    我正在尝试生成一个响应 返回按 3 个不同列排序的相同集合 这是我目前拥有的代码 var findRoute router route find findRoute get function req res Box find functio
  • Git 以错误用户身份推送到远程 GitHub 存储库

    我有一个工作 GitHub 帐户和一个个人帐户 首先 我使用个人帐户进行测试项目 然后我继续使用同一台计算机上的另一个帐户创建存储库 现在我想再次在我的个人帐户上创建一个新的存储库 我更改了全局和本地user name 并创建了一个新的 s
  • 如何通过reactnavigation v5将参数从一个屏幕传递到另一个屏幕

    我有一个问题 有一个用户列表 我想向任何用户添加约会 因此在用户屏幕上有一个 PlusButton 在添加约会屏幕上发送用户 从用户屏幕的 headerRight 呈现的 PlusButton 但我不知道如何传递给 AddAppointme
  • 在 fullCalendar 中更改 slotDuration 而不重新加载页面

    使用 fullcalendar 我需要无需重新加载页面即可更改slotDuration参数取决于其他条件 我在一种情况下这样做 calendar fullCalendar option slotDuration 00 15 00 在其他情况
  • 如何在 NHibernate 中映射 Collection

    我有一个联系人类 基类 一个名为 客户 的类和一个名为 供应商 的类 客户和供应商类都派生自联系人 客户与订单有 0 n 关系 我想要在客户上有一个 Collection 属性 并将其在 NHibernate 中映射到其相应的表 在 NHi