问题标签 [windsor-nhfacility]

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 回答
2052 浏览

nhibernate - NHibernate (3.1.0.4000) NullReferenceException 使用 Query<> 和 NHibernate Facility

我对 NHibernate 有疑问,我似乎找不到任何解决方案。在我的项目中,我有一个简单的实体(批处理),但是每当我尝试运行以下测试时,都会出现异常。我已经尝试了几种不同的方法来执行类似的查询,但几乎所有的例外都是相同的(它执行的 LINQ 方法不同)。

第一个测试:

例外:

第二个测试:

例外:

但是,这个正在传递(使用 QueryOver<>):

使用 QueryOver<> API 一点也不差,但我有点困惑 Query<> API 不工作,这有点令人难过,因为 First() 操作非常简洁,我们的开发人员真的很喜欢 LINQ。

我真的希望有一个解决方案,因为如果这些方法未能通过如此简单的测试似乎很奇怪。

编辑

我使用的是 Oracle 11g,我的映射是使用通过 Castle Windsor 和 NHibernate 设施注册的 FluentNHibernate 完成的。正如我所写,奇怪的是查询与 QueryOver<> API 完美配合,但不能通过 LINQ。

0 投票
1 回答
1676 浏览

nhibernate - 使用 Castle Windsor 和 NHibernate 工具将正确的 ISessionFactory 注入 IRepository

我有三个 SQL Server 数据库,单个应用程序从中检索数据。我正在使用 NHibernate 从不同的数据库中检索数据。我设置了一些东西,以便每个数据库在自己的程序集中都有自己的存储库和类映射。在我的 castle.config 文件中,我使用 Castle NHibernate Facility 设置了数据库连接:

我所有的存储库都有一个以 ISessionFactory 作为参数的构造函数:

我有一个安装程序类,我想在其中定义各种存储库:

使用一个数据库可以正常工作。当我将第二个数据库添加到组合中时,相同的 ISessionFactory 被注入到所有存储库中。我的问题是处理这个问题的最佳方法是什么?我可以手动指定应将哪个 ISessionFactory 注入哪个 Repository<> 但我似乎找不到关于此的文档。最好的方法是,如果我可以这样说:对于程序集 DAL.DatabaseOne 中的所有类映射,始终注入对应于 databaseone.factory 的 ISessionFactory;并且对于程序集 DAL.DatabaseTwo 中的所有类映射,始终注入对应于 databasetwo.factory 的 ISessionFactory。

想法或建议?

0 投票
1 回答
738 浏览

nhibernate - 为什么要使用 CastleWindsor NHibernate 设施中的 ISessionManager?

我是NHibernate 和Castle Windsor 的初学者,但我正在处理的当前应用程序正在使用Castle Windsor 的NHibernate 设施集成级别2,即使用ISessionManager。

我已经比较了手动保存数据和使用 ISessionManager 需要做的事情,我并没有真正编写更少的代码。我的问题是为什么我什至需要 ISessionManager?它为我提供了哪些优势?使用 ISessionManager 有什么缺点?

0 投票
2 回答
2624 浏览

.net - 使用 Castle AutoTx Facility 和 NHibernate Facility 的交易

我正在尝试将Castle NHibernate 设施与 AutoTx 设施一起使用。作为测试,我在我的服务中间抛出一个异常,以确保事务被回滚。但是,数据仍然保留在数据库中。

我的服务接口,IActivityService使用 TransactionAttribute:

的实施CreateActivity。我在这里抛出一个异常,期望添加的数据AddActivity被回滚:

的实施AddActivitySessionManager是注入的ISessionManager

最后,这是我配置 Windsor 容器的方式。NHibernateInstaller直接来自指南,我流畅的 nhibernate 配置换成了:

配置看起来相当简单,但我不知道我错过了什么。谢谢你的帮助。

0 投票
1 回答
1186 浏览

nhibernate - 在 Wcf 服务中使用 Windsor NHibernateFacility 和自定义服务行为来创建事务而不是事务属性

我正在尝试第一次在 Wcf 服务中使用 Windsor NHibernate Facility 并替换当前手动注册 NHibernate,以便可以在所有服务中使用一致的方法。

目前的工作方法

以前我一直在手动注册 NHibernate 组件。

然后,我使用自定义服务行为为每个操作创建和完成事务范围。

NHibernate 设施的集成

我已经下载了0.3.1.2001 工件并使用下面的资源尝试插入该工具并移除任何手动连接到 NHibernate 的线路。但是我不想用TransactionalandTransaction属性来装饰服务和方法。以下是我目前的线材。

每当我调用服务端点之一时,服务都会失败,并出现以下异常:

尝试为解析类型“Juice.iCheque.eMoneySystem.Settlement.ISettlementService”实例化模型“NHibernate.ISession”时,上下文中没有事务。如果您已验证您的调用堆栈包含具有 [Transaction] 属性的方法,那么还要确保您已注册 AutoTx Facility。

问题是我如何在NHibernateFacility我当前的实现中使用而不使用Transaction属性。

资源

http://richarddingwall.name/2010/08/17/one-nhibernate-session-per-wcf-operation-the-easy-way/

https://github.com/haf/Castle.Facilities.NHibernate/wiki/NHibernate-Facility---快速入门

0 投票
1 回答
186 浏览

nhibernate - 我升级了 NHibernate,现在当我对使用 MSDTC 不感兴趣时​​遇到 MSDTC 问题

我升级了我的 NHibernate 库以及 Castle.Windsor。我也从使用 NHibernateIntegration 转移到 Castle.Facilities.NHibernate

我在这里实施了 NHFacilities 页面上的建议 - https://github.com/haf/Castle.Facilities.NHibernate/wiki

现在,当我运行我的 Web 应用程序时,我被各种 MSDTC 异常所阻止 - 最新的是Microsoft 分布式事务协调器 (MS DTC) 已停止此事务

在这一点上我不得不说,我必须查一下 MSDTC 是什么,并且可以确认我对使用它没有任何兴趣!;-)

我没有配置它,也看不到任何让我意识到我会使用它的地方。

我做的任何谷歌搜索都与知道他们正在使用它以及为什么使用它的人有关。然而,我不知道刚刚发生了什么。

谁能告诉我新的 NHibernate (3.2) 或与 NHFacilities 或 Castle.Windsor 相关的依赖项导致我的代码开始使用 MSDTC 的原因是什么?

我可以删除它吗?

或者我的代码是否有更险恶的地方需要修复?请记住,它在升级之前按原样工作。

0 投票
1 回答
106 浏览

.net - c# - 是否可以在 .Net v3.5 上使用 Castle.Facilities.NHibernate?

我正在使用 Windsor 和 NHibernate 开发一个 ASP.NET 应用程序。我想使用 Castle 的新NHibernateFacility,但我被困在 .NET 3.5 上,而 NHibernateFacility 和 AutoTx 仅针对 .NET 4。

在 v3.5 上重新编译它们是否安全?如果没有,是否有另一种简单的方法可以为每个应用程序维护多个 ISessionFactory?

0 投票
0 回答
1496 浏览

fluent-nhibernate - 使用 Castle.Facility.AutoTx 和 Castle.Facility.NHibernate 为每个 Web 请求创建一个休眠会话

我正在使用 Castle Windors,它是AutoTx和 haf 的NHibernate Facility。最终,我想要 AutoTx 提供的 Transaction 属性易于使用的好处。(ASP.NET MVC 4 项目)。

我正在使用 Castle.Facilities.NHibernate.ISessionManager 来管理我的 PerWebRequest 会话。我已经这样设置了 Windsor 安装程序:

我正在使用 SessionPerWebRequest 的 DefaultLifeStyle,我希望它会做到这一点,为我提供一个持续整个 Web 请求的会话,这样在同一请求中对 SessionManager 上的所有 OpenSession 调用都使用相同的会话。我正在使用以下代码对其进行测试:

并检查日志以查看每个已创建会话的 ID。id 总是不同的。例如

值得注意的是,我并没有以 Handlers 的方式在 web.config 中添加任何内容。我需要吗?(我在 NHib Facility Wiki 中没有看到任何文件表明这一点)我是否期望相同的 Session 总是返回不正确。

我查看了该设施的源代码,但不了解每个 Web 请求的会话是如何被实例化的,以及对 OpenSession 的多次调用将如何在同一个 Web 请求中产生同一个会话。

以下是 SessionManager 向 Windsor 注册的方式:

ISession 使用以下方法在 Windsor 中注册

哪个确实将 ISession 注册为 PerWebRequest,但是我在代码中看不到在需要会话时提取该命名注册的任何地方?

任何有关我需要做什么的帮助,以使每个 Web 请求的 Session 正常工作,我们都将不胜感激。

更新 我决定将传递给 SessionManager 构造函数的代码函数替换为从容器中获取 ISession 的代码,而不是使用工厂。非常适合我想要它做的事情,包括被包裹在事务中,每个 Web 请求只打开一个会话,或者瞬态等。

我希望 Kernel.Resolve() 会抓取容器中的第一个注册服务。这将是我将生活方式设置为的任何内容。

0 投票
1 回答
797 浏览

nhibernate - 如何通过 C# 代码而不是 xml 配置“Windsor NHibernate Facility”?

我最近尝试将 Castle Windsor 和 Nhibernate Facility 与我的旧项目集成,请遵循文档(http://docs.castleproject.org/Windsor.NHibernate-Facility.ashx)。

但我想知道是否有办法通过 C# 代码配置 NHibernate SessionFactory,而不是在 xml 中。原因是:我的旧项目在其他地方配置了连接字符串,我无法在 2 个地方配置它。我已经成功构建了我的 NHibernate 会话工厂(3 个数据库,3 个工厂),只需将我的会话工厂对象注入 NHibernate 设施中,给它一个“id”和“别名”,这可能吗?还是有更好的主意?

先感谢您 !