问题标签 [nhibernate-3]

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 投票
2 回答
938 浏览

c# - 对象 A 具有对象 B 的集合。在使用 LINQ 的 NHibernate 中,如何检索具有至少一个 B 的 A 列表

让我们以这些域对象为例:

我需要使用 NHibernate 3.x检索具有这些名称的任何A对象Bname1name2

例如,假设您B从名称数组中获取要检索的字符串作为字符串string[] names = new string[] { "name1", "name2" }

我想过.Query<A>().Where(someA => some.CollectionOfB.Any(someB => names.Contains(someB.Name)))我怀疑这会被 NHibernate LINQ 提供程序编译为 SQL 查询。也许这会被编译成一个不是很优化的 SQL 查询。

使用 NHibernate 3.x LINQ 提供程序构建此查询的最佳方式是什么?

0 投票
1 回答
3117 浏览

mysql - 具有相同标识符值的不同对象已与会话相关联:实体的 XXX

我们有一个运行 NHibernate 3 和 Castle.ActiveRecord for MySQL 的 ASP.NET MVC 3 C# 项目,我们试图让“每个请求一个会话”来使用本教程

它似乎适用于某些东西,但是当我们这样做时SaveAndFlush(),该命令会给我们一个错误:

如果我们尝试只做,我们会得到相同的消息,所以它与函数Save()无关。Flush()

我在搜索时找到了一些结果,但没有什么可以用来让它工作。

我没有测试过的东西,因为我不知道我是怎么做的,是,

有任何想法吗?

0 投票
1 回答
84 浏览

nhibernate - 在 Get() 之后急切地加载关联

我试图找到比这更好的方法来加载关系:

我可以像这样使用 QueryOver API 做到这一点:

我猜它会生成相同的 SQL,但它太冗长了。

有没有办法做类似下面的事情?

0 投票
2 回答
504 浏览

linq - NHib 3 配置和映射返回空结果?

注意:我特别不使用 Fluent NHibernate,而是使用 3.x 的内置映射样式。但是,当我认为应该返回记录时,我得到了一个空白记录集。

我确定我做错了什么,它把我逼到了墙角。:)

背景/设置

  • 我有一个名为 Maximo 的 IBM 产品的 Oracle 11g 数据库
  • 该产品有一个名为 workorder 的表格,其中列出了工作订单;该表有一个名为“wonum”的字段,它代表一个唯一的工作订单号。
  • 我有一个“报告”用户,可以通过 maximo 模式访问表
    • 例如“从 maximo.workorder 中选择 *”
  • 我正在使用 Oracle 的托管 ODP.NET DLL 来完成数据任务,并且是第一次使用它。

我尝试过的事情

  • 我创建了一个基本的控制台应用程序来测试它
  • 我在主分支上添加了 NHibernate.Driver 中的 OracleManagedClientDriver.cs(我正在使用的版本中没有正式发布)。
  • 我创建了一个名为 WorkorderBriefBrief 的 POCO,它只有一个 WorkorderNumber 字段。
  • 我创建了一个类映射 WorkorderBriefBriefMap,它只将该值映射为只读值。
  • 我创建了一个带有控制台输出的控制台应用程序来尝试编写工单行。
  • 会话和事务似乎正确打开,
  • 我测试了一个标准 ODP.NET OracleConnection 到我的连接字符串

编码

POCO:WorkorderBriefBrief.cs

映射:WorkorderBriefBriefMap.cs

放在一起:Program.cs

提前感谢您提供的任何帮助!

更新

以下代码(带有 OracleDataReader 的标准 ADO.NET)可以正常工作,返回应有的 16 个工单编号。对我来说,这表明我对 NHibernate 的使用比 Oracle Managed ODP.NET 更多。所以我希望这只是我在上面的映射或配置中所做的一些愚蠢的事情。

0 投票
1 回答
361 浏览

c# - '禁用幽灵属性获取的含义因为它不支持实体级别的惰性'

我在 NHibernate-DataAccess 中看到了这个警告:

'禁用实体的幽灵属性获取,因为它不支持实体级别的惰性'

有人知道,这是什么意思?- 我必须改变什么来解决这个问题?

这是导致此警告的实体的映射:

更新类 BusinessTypeBase 的定义:

更新类 BusinessType 的定义:

0 投票
1 回答
57 浏览

nhibernate - 按 ID 添加列表项

比方说:

我正在尝试使用 NHibernate 实现 DDD,所以我想知道如何将子项链接到父项而不从数据库中检索它。

0 投票
1 回答
681 浏览

mapping-by-code - MappingException 的原因:没有持久性:MyClassProxy

SaveOrUpdate通话中,我得到了MappingException No persister for: MyClassProxy.

奇怪的是,我可以使用代码插入新行,但如果该行存在并且存储库尝试更新它,我会收到此异常。

在搜索和阅读了很多关于这个异常的问题之后,这并没有帮助我找到原因,我会问自己:如果映射适用于读取/插入数据,有哪些可能的原因会导致这个异常?

关于我的案例的更多信息:

  • 使用 NHibernate 版本3.3.1.4000
  • 映射是由代码(不是流利的)和引用的另一个dll创建的
  • 映射由 aClassMappingSubclassMapping带有鉴别器的 a 组成
0 投票
2 回答
379 浏览

c# - 未存储在 NHibernate 中的多对多关联

我会尽量准确地解释这个问题。

有一个实体与(集合)A具有一对多关系。B

此外, entity与 entityBmany-to-many关系C

当我第一次存储类型的瞬态对象时AA与相关的瞬态B实体实例A都在数据库中正确创建,但CB不会创建

多对多关联在关联的两边映射如下(mapping-by-code方式):

此外,当实体B和实体C都是瞬态对象时被实例化时,我在实体B集合上添加实体之一C,反之亦然。

最后,事务成功结束:我的意思是实体AB,以及它们的关联按预期存储在数据库中。

为什么实体C关联没有保存在数据库中?我究竟做错了什么?

  • 注意:我使用的是最新版本的 NHibernate 3.x 系列

  • 注意 2:我刚刚分析了 SQL Server 数据库,并且从未执行到 m:n 表中的插入!

0 投票
1 回答
243 浏览

c# - NHibernate 多对一“即时”

我想知道下一个问题是否可以在 NHibernate 中以不同的方式解决。

假设我们有这个域:

LastAssociationWithB属性表示集合属性B中关联的持久对象之一。CollectionAssociationOfB

实际上,LastAssociationWithB表示B按日期添加的最后一个持久对象。

所以,在域中,当一个新B的被添加到 时CollectionAssociationOfB,它也被分配到LastAssociationWithB.

这是稍后将代码转换为不太复杂的 LINQ 查询的好方法。

无论如何,我的问题是:你知道任何其他方法吗?例如,某种多对一关联会在后台产生 SQL连接,因此您不需要在A表中具有明确的 1:n 关系,但它会维护类属性?

还是我目前的方法是解决这种情况的推荐方法?

旁注:在现实世界的场景中,这CollectionAssociationOfB是一个有序列表,因为排序是在 NHibernate 映射配置中指定的。

0 投票
2 回答
496 浏览

nhibernate - NHibernate RowCountInt64 使用转换后的查询返回错误的计数

我在执行 NHibernate 查询时遇到了一个奇怪的错误。我有一个IQueryOver<ExternalUser, ExternalUser>过滤和转换类型的查询(使用 DistinctRootEntity,我猜这是导致问题的原因)。我创建这样的查询:

当我执行时query.RowCountInt64(),我得到 4。

当我执行时query.List(),我得到了 3 个项目。

我也试过query.ToRowCountInt64Query().List<long>().Sum()这也给了我4。

我也试过query.ToRowCountInt64Query().FutureValue<long>().Value了,这也给了我 4。

任何想法如何解决这个问题?