NHibernate 一对一 vs 2 多对一

2023-12-28

在他的博客中 http://ayende.com/blog/2381/nhibernate-one-to-one,Ayende 建议使用一对一可能不是实现传统 1:1 对象关系的最佳方式(例如 customer.Name == name.Customer)。

  1. 如何选择何时使用一对一关系?
  2. 为什么我应该选择2个一对多关系
  3. 一对一如何工作(没有生成 FK 列)

一对一:

2 多对一:


我遇到使用一对多映射的唯一原因是性能。

我最初采用一对一的方式,直到项目因性能问题而陷入困境。出现问题的原因是您通常无法在反向进行一对一映射的延迟加载。例如。当您有实体 A 可以(但不必)在该映射上有相关实体 B 时。在这种情况下,对于您加载的每个实体 A,也会加载实体 B。这样做是为了防止检查相关对象是否存在时出错。延迟加载代理会误导您认为相关实体存在,即使它不存在。如果您像这样检查相关实体是否存在,您将会遇到问题

if (entityA.EntityB == null) HandleNoEntityB();

但是,如果您使用一对多映射,则延迟加载没有问题,因为开发人员正在使用我们可以为其创建代理的集合。

if (entityA.EntitiesB.Count == 0) HandleNoEntityB();

如果您可以在系统中假设实体 A 始终具有一个相关实体 B,那么这不一定是问题。在这种情况下,您应该在该映射上设置 contrained="true"。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate 一对一 vs 2 多对一 的相关文章

随机推荐

  • Sequel Pro 在 Docker 中使用 Mysql

    我用 docker compose 构建了 2 个 docker 容器 我在 Mac 上使用 Docker 没有 boot2docker version 2 services drupal web image drupal latest p
  • Outlook Web 应用程序的任务窗格插件

    通过命令加载项 任务窗格将出现在 Outlook 桌面应用程序的右侧 同样 是否可以让任务窗格显示在 Outlook Web 应用程序的右侧 提前致谢 跟进这个 插件命令 https blogs msdn microsoft com exc
  • 将数组颠倒过来?

    我不是在谈论array flip 我想反转一个没有数字 字母基础的数组 只是倒挂 Example array music television hollywood Will be array hollywood television mus
  • 为 Azure 警报配置电子邮件模板

    有没有办法 我可以为 Azure 警报配置电子邮件模板 我已为指标创建了电子邮件警报 并且需要在指标值超过阈值时发送自定义电子邮件 无法自定义 Azure 警报的电子邮件模板 作为解决方法 你可以在 Azure 警报上配置 Webhook
  • Android如何以编程方式获取使用whats app应用程序的联系人列表

    我在此应用程序中使用小型 Android 应用程序 我尝试获取使用 Whats App 应用程序的联系人 并在联系人更新他 她的个人资料图片和状态时 从我的应用程序中提醒我选择的 Whats App 联系人 您可以查询内容光标以查看联系人具
  • 如何使用相同的模型对象初始化 JavaFX 控制器?

    Scenario 我正在创建一个 GUI 其中多个视图引用同一模型对象 我习惯什么 在 Swing 中 如果我希望所有视图都引用同一模型 我会将模型传递到构造函数中 我目前在做什么 在 JavaFX 中 在加载每个视图 控制器后 我通过在视
  • iOS 模拟器:如何在 Mac 笔记本电脑上进行 2 指单击?

    在iOS模拟器中 如何在mac笔记本电脑上模拟2指单击 按住 Option alt 键的同时单击
  • 更新 mongoengine 中的嵌入文档列表

    我正在努力解决 mongoengine 语法 我有以下型号 class Post EmbeddedDocument uid StringField required True text StringField required True w
  • 如何将ImageSource转换为Byte数组?

    我使用 LeadTools 进行扫描 我想将扫描图像转换为字节 void twainSession AcquirePage object sender TwainAcquirePageEventArgs e ScanImage e Imag
  • git 告诉我我的文件已更改,但我看不到任何区别

    我刚刚安装了最新的 Git 1 9 5 突然它告诉我我的工作树不干净 更改未暂存 但我在任何 diff 工具中都看不到任何文件中的任何更改 我尝试了内置的 Tortoise 和 Visual Studio 当我运行 git status 时
  • 带 getter 的 Kotlin 属性。我可以不指定初始值吗?

    我想创建一个单例类 但不幸的是 Android 几乎任何东西都需要 Context 所以我需要它来创建一个实例 所以我只是假设用户调用init 然后返回实例 如下所示 如果 instance为null 会抛出异常 所以get方法不能返回 n
  • iOS Swift FIRebase:将数据移动到另一个 firebase ref

    我有一个简单的购物清单应用程序 由 firebase 支持 同步 并且由多个用户添加项目 我已经为 GroceryItem 和 Users 创建了数据结构 我的应用程序的一个功能是 您可以单击单元格 它会在项目旁边放置一个复选标记 并将 已
  • Android 设备对压力敏感度的支持程度如何?

    我想编写一个应用程序 对用户手指施加的压力做出反应 具体来说 我想用它来改变所绘制线条的粗细 我很高兴能够对手指触摸屏幕的表面积做出反应 MotionEvent getSize 和 MotionEvent getPressure 函数看起来
  • 实现 C++ 模板,用于生成给定范围的索引序列

    所以 C 14提供了structmake index sequence
  • 将 100 与 BigDecimal 相乘时哪种方法更好?

    这里我在使用Java BigDecimal时遇到一个问题 当我想为 BigDecimal 对象乘以 100 时 哪种方法会更好 10 乘以 2 次 向右移动点 2 按十次幂缩放 2 还有其他办法吗 如果有请告诉我 顺便说一句 它将用于商业计
  • 在代码中设置 Far Future Expires 标头 - ASP.NET

    有没有一种方法可以使用 ASP NET 在代码中以编程方式设置 Expires 标头 具体来说 我需要在整个文件夹和所有子文件夹上设置它 并且该文件夹仅包含静态文件 JavaScript CSS 图像等 而不包含aspx文件 因此我不能只向
  • Java Date toString 包含时区...为什么?

    我今天用 VB6 编写了一些代码 它可以获取自 1970 年 1 月 1 日以来的毫秒数 这样我就可以将值发送到 java 应用程序 该应用程序将解析该值 例如new Date Long parse milliseconds 据我所知 日期
  • Ng5 Karma Jasmine 测试渲染组件而不是结果页面

    假设我有一个非常简单的 创建 单元测试 这样ng cli为您生成 describe MyComponent gt let component MyComponent let fixture ComponentFixture
  • AWS 中的“承担”角色到底是什么?

    Question 在 AWS 中 担任 角色到底意味着什么 哪里提供了明确的定义 背景 承担一个角色经常使用并试图理解其定义及其实际含义 我想当委托人 IAM 用户 在 EC2 实例中运行的应用程序等调用操作来访问 AWS 资源 需要调用操
  • NHibernate 一对一 vs 2 多对一

    在他的博客中 http ayende com blog 2381 nhibernate one to one Ayende 建议使用一对一可能不是实现传统 1 1 对象关系的最佳方式 例如 customer Name name Custom