问题标签 [nhibernate-futures]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
405 浏览

nhibernate - 使用 NHibernate-Futures 获取多对一

我有一个类似于下面的类图。

我正在使用这个示例,因为它比解释我正在处理的域更简单。

一个Cheque实体ManyToOne与三个实体的其余部分有关系。

现在的关系不是双向的

如何编写一个有效的期货查询来获取一个列表,Cheques这样我就不会得到 N+1 来加载Account, Customer, Branch

我尝试过使用左连接,但想知道这是否可以使用简化的 SQL 来完成

0 投票
1 回答
3214 浏览

c# - NHibernate Futures 有时返回代理,其他实体

我有一个使用多个未来查询处理完整对象图的数据库获取。它看起来像这样(已更改类名以保护无辜者):

注意:我可以在 NHibernate LINQ 中实现这一点,但行为保持不变。

奇怪的是: foo有时会是类型FooNamespace.Foo(正确的、具体的类型),有时会是Castle.Proxies.FooProxy.

我得到的是真实类型还是代理类型似乎取决于之前是否在会话中使用过 NHibernate。当这个查询在其他 NHibernate 查询之后发生时,它返回一个FooProxy. 如果是第一次使用会话,则返回一个Foo.

为什么会这样?我怎样才能防止它发生? 我有目的地获取整个对象图Foo以确保没有代理。而且图本身不包含任何代理,它只是根Foo引用。返回的类型取决于 NHibernate 之前所做的事情这一事实似乎是关键(而且真的很奇怪)。

一些结束语:

  • NHibernateUtil.IsInitialized喂食 a 时返回 true FooProxy,所以我不能保证它不是这样的代理
  • 我是代理不利的,因为该图将被序列化以用于缓存目的和反序列化在使用时发出呱呱叫声FooProxy

非常感谢任何见解!

0 投票
1 回答
659 浏览

c# - Nhibernate Queryover 多级模型

假设我有这个数据库架构

我想通过用户名在一次数据库往返中使用 Nhibernate 为用户选择此选项,但选择具有未来的 resourceVersions 不起作用。如何使用 Futures 在一次往返中补充集合的集合?我更喜欢 QueryOver 或 Criteria 而不是 HQL。我正在使用 nHibernate 4.0。

映射:

只有在 Visual Studio 中根据 Intelli Trace 执行的查询是这个:

在@p0 中是我传递给方法的用户名。完全没有版本的迹象,我觉得有点奇怪。

0 投票
1 回答
104 浏览

c# - NHibernate - Future() 之后的 LINQ Where() 是否触发查询?

我必须在现有系统上实现基于模型的访问安全性,以防止用户加载/更改其他用户的数据。所以我为此目的创建了几个接口并让模型类实现它们。我有一个调用所有查询的基础存储库类,所以我只能在一个地方检查这些接口,一切都会正常工作。确实如此,但我不确定我是否同时破坏了 Future 功能。

所以基本上,问题很简单,如果我在每次 Future() 调用之后调用这个扩展方法,它会立即触发查询(打破未来的目的)吗?Where() 或强制转换为接口是否会强制 Future 立即执行?

0 投票
2 回答
761 浏览

c# - 在 Linq to NHibernate 查询中使用 FetchMany 和 Select

我有 Personne(人)实体,其中包含子集合 Policy and Procedures。我想使用 Future 查询的功能加载一批 Personnes 并加载这些集合。但!我被要求不要在获取策略和程序的查询中复制 Personne 的列,这对于优化从数据库传输到服务器的数据量似乎是明智的。

这就是我最终要做的。

此查询不起作用,出现错误:Collections.IList' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable`1[System.Object]'

如果我删除 Select() 行调用,它确实有效,但当然它会导致 Personne 列以及 Policys 和 Procedures 列被获取。

有解决这个问题的想法吗?

0 投票
1 回答
608 浏览

c# - Nhibernate - 相同的参数值将以不同的名称应用于不同的未来查询

我们正在尝试使用 Nhibernate 未来查询来预先加载一些数据。正如您在调用 ToList() 时已经知道的那样,我们之前拥有的所有未来查询都将在一个事务中执行。

此代码将生成以下查询集,

在查看 sql 查询时,相同数量的参数值将应用于具有不同参数名称的所有查询。

假设selectedPhysicianIds包含 1000 个整数的数组(用户可以选择他们想要的任何东西)。

在这种情况下,相同数量的参数值将应用于所有四个未来查询。所以参数总数将是(4 * 1000)4000。但是我们在sql server中有以下限制。“传入的请求参数太多,服务器最多支持2100个参数”

有没有办法在 Nhibernate 的帮助下解决这个问题?