FluentNHibernate:使用 NotFound.Ignore() 映射引用时的性能损失

2023-11-30

我使用 FluentNhibernate,并且当关联引用映射为 NHibernate 时,我看到 NHibernate 执行许多查询NotFound.Ignore().

由于我的遗留数据库的引用完整性有点糟糕,我想知道是否有解决方法或者是否有我可以使用的替代映射。

Example:

//no query when loading the entity
References<User>(x => x.User, "UserId").LazyLoad().Nullable();

//performs a hundred queries when I load my entities
References<User>(x => x.User, "UserId").LazyLoad().Nullable().NotFound.Ignore();

不幸的是,这是一个已知问题,NHibernate JIRA 中存在一个问题(https://nhibernate.jira.com/browse/NH-1001)

虽然有一个解决方法,但它并不漂亮。在实体中,您需要执行以下操作:

class Entity {

    private int? _userId;

    private User user;

    public User User 
    {
        get { 
            if (_userId == null)
                return null;

            return user;                
        };
        set {
            if (value == null)
                _userId = null;
            else
                _userId = value.UserId;

            _user = value;
        };
    }
 }

在映射中,您将正常映射引用,但没有 not-found =ignore 设置,但您还映射外键字段:

 References<User>(Reveal.Membmer<User>("_user"), "UserId").LazyLoad();
 Map(Reveal.Membmer<int?>("_userId")).Nullable().Not.Update().Not.Insert(); // Suppress updates and inserts so that they don't conflict with the mapping of User.

基本上,您让 NHibernate 在 _user 字段上正常运行,然后使用 _userId 字段手动执行 null 检查。这样就可以避免 N+1 选择问题。缺点是它使实体变得复杂并且使查询更难编写。例如,如果您希望能够在 LINQ 查询中使用用户属性,则必须公开内部 _user 字段并使用它。

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

FluentNHibernate:使用 NotFound.Ignore() 映射引用时的性能损失 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • 在 Angular 10 中将数字转换为货币格式

    我正在使用 Angular 10 并从 angular common 导入CurrencyPipe 并根据找到的建议 我在模板中实现了以下内容 p Amount currency p 这显示了以 为单位的金额值 并像预期的那样带有逗号 但不
  • Ruby 1.8.7 中具有等效块的 Array#uniq

    数组 uniqRuby 1 9 中有此行 为 c a def a xyz b abc b xyz c jkl c uniq s s w gt a def b abc c jkl 它可以占据一块 并赋予我们所提供的独特价值 但是 这在 Rub
  • 实体框架 DbContext 执行的日志查询

    我在 MVC 5 项目中使用 EF 6 0 和 LINQ 我想记录实体框架 DbContext 执行的所有 SQL 查询 以用于调试 性能测量目的 在 Java Hibernate 中 可以通过设置属性来实现等效行为hibernate sh
  • C++Continue 语句混乱

    背景 我正在阅读一本旧的 C 入门读物 我在床底下放了几年了 在阅读某一章时 我碰巧遇到了 continue 声明 我阅读了书中有关它的信息 但是 这本书在细节上有点缺乏 出于好奇 我想测试 continue 声明 看看我是否可以自己弄清楚
  • MX 查找返回的地址到底是什么?

    While 寻找一种从 Python 代码发送电子邮件的方法 我偶然发现了以下内容 当我进行 MX 查找时host t mx gmail com命令 我 借用 了这个答案 我得到以下信息 gmail com mail is handled
  • CSS 选择器“(A 或 B)和 C”?

    这应该很简单 但我找不到它的搜索词 假设我有这个 div class a c Foo div div class b c Bar div 在 CSS 中 如何创建一个与 a 或 b 和 c 相匹配的选择器 我知道我可以这样做 a c b c
  • 怎样才能实现免费的Interface类呢?

    我有一个小问题 正如标题所说 我想释放一个其类实现接口的对象 但是出现错误 无效的指针操作 我的界面 Interface Type An interface definition IMessageEvents Interface IInte
  • data.table 不再通过引用更新

    这是一个函数 f lt function orderData colNames lt paste0 lim sort unique orderData XLM orderData colNames lim factor XLM lapply
  • 通过 Shopware 6 API 添加图像

    我有一个 Shopware 6 3 商店 需要使用集成 API 将图像迁移到其中 我应该如何构建媒体上传的正文 我需要将文件放在某处还是只传递链接 我已成功通过此处的指南将新产品推入 Shopware https docs shopware
  • WPF TreeView 悬停时突出显示行

    目前 将鼠标悬停在 TreeView 中的标题上将突出显示该标题 我想将鼠标悬停在 TreeView 中行的任何部分上以突出显示整行 就像 Windows 资源管理器所做的那样 有人可以提供一个如何做到这一点的例子吗 您需要更改Contro
  • python如何更改嵌套列表中的元素[重复]

    这个问题在这里已经有答案了 我已经使用Python很多次了 今天我对一个简单的嵌套列表感到惊讶 如何更改列表中元素的值 gt gt gt l 0 0 10 gt gt gt l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • Matplotlib 在阶梯图中仅绘制水平线

    我正在使用 matplotlib 从数据框中绘制一些步骤函数 df s1 plot c b drawstyle steps post df s2 plot c b drawstyle steps post 结果看起来像 我希望只绘制水平线
  • 如何从 PowerShell 调用复杂的 COM 方法?

    是否可以使用命名参数从 PowerShell 调用 COM 方法 我正在使用的 COM 对象方法有数十个参数 object GridData DataFile xCol yCol zCol ExclusionFilter DupMethod
  • 使用 Break 和 continue 语句的 While 循环

    我是初学者 while 语句中的break 和 continue 语句用于什么 while break continue 这两个关键字可以循环使用来改变它的行为方式 Break 语句终止循环并继续执行下一个可执行语句 continue 语句
  • 如何删除仅包含 NA 的列?

    我有一个 data frame 其中包含一些具有所有 NA 值的列 如何从 data frame 中删除它们 我可以使用该功能吗 na omit 指定一些额外的参数 一种方法是 df colSums is na df nrow df 如果一
  • C# - For 循环和 lambda 表达式

    我的问题是为什么我在 lambda 表达式中使用迭代器变量会得到错误的结果 好吧 我已经关注了 SWeko 的回答here 但这对我不起作用 这是我的伪代码 List
  • Odoo 在树视图第二行记录上抛出 MissingError

    我如何解决此错误 Odoo 在单击 TreeView 第二行按钮时抛出 MissingError 第一个记录行有效 但我需要这样 对于树上的每个记录 下面的代码将能够传递上下文并打开适当的视图 请协助 这是按钮上调用的代码 api mult
  • 绘制彼此靠近的对象[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想在屏幕上绘制下图 sphere cylinder angle 45 cyli
  • datetimepicker getDate 返回 UTC 格式的日期/时间

    我碰巧读到了这篇文章日期时间选择器插件并发现它很有用 我使用此工具面临的问题是我无法获取 UTC 或其他格式的数据 时间格式 我的目的是至少获取 UTC 格式的日期 时间 starttime datetimepicker ampm true
  • FluentNHibernate:使用 NotFound.Ignore() 映射引用时的性能损失

    我使用 FluentNhibernate 并且当关联引用映射为 NHibernate 时 我看到 NHibernate 执行许多查询NotFound Ignore 由于我的遗留数据库的引用完整性有点糟糕 我想知道是否有解决方法或者是否有我可