Nhibernate 专家提倡的一种做法是做 all actions in inside a transaction.
在典型的 3 层 Web 架构中,Nhibernate 的依赖性仅限于数据层。
在这种情况下可以使用吗
using (var tr = NHibernateSession.Current.BeginTransaction()) {
在 Controller 级别。这不会给服务层带来对Nhibernate的依赖吗?
最佳答案
解决此问题的一种方法是将 NHibernate session 和事务语义包装在您自己的抽象接口(interface)/实现类中。这样,如果您想说,切换到 Linq2Sql,您可以创建 L2S 实现。然而,这仍然意味着事务语义仍然在服务层,而不是 NHibernate 特定的调用。谷歌IRepository<T>
有关如何执行此操作的许多示例。
但是,如果您不打算在将来关闭 ORM,有人可能会争辩说在服务层使用 NHibernate 不一定是一件坏事,因为 NHibernate 本身就是数据层的抽象。
关于c# - Nhibernate 事务 :Avoiding Nhibernate dependency in the service layer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2547539/