问题标签 [isession]

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

nhibernate - 关于 NHibernate 的 ISession

这个问题中,用户询问关闭会话的更好方法,因为他遇到了一些错误。

投票最多的答案是 Ayende 的答案:

您应该始终使用 session.Dispose(); 另一个是非常奇怪的事件

我真的应该总是打电话session.Dispose()吗?打电话还不够session.Close()吗?

0 投票
1 回答
871 浏览

nhibernate - SessionScope 是否完全等同于 ISession?

Castle ActiveRecord 的 SessionScope 是否完全等同于 NHibernate 的 ISession?如果是,为什么 Castle ActiveRecord 提供了重复的功能?如果不是,它们的区别是什么?

0 投票
1 回答
620 浏览

nhibernate - 在 ActiveRecordMediator 中,应该使用 Execute 还是 CreateSession?

假设我要做一些需要访问 NHibernate 的ISession. 例如,通过运行 Sql 查询ISQLQuery或通过运行 LINQ-to-NHibernate session.Linq<MyType>()。我知道有两种访问方式ISession

  1. ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()
  2. ActiveRecordMediator.Execute()

各有什么优缺点?另外还有其他替代方法吗?

0 投票
1 回答
555 浏览

asp.net-mvc - IsessionFactory 问题

我在这一行收到经典的“对象引用未设置为对象的实例”错误

我的configure.cs文件如下

在 webconfig 我有连接字符串

使用在 VS2008 中构建的 appcode 文件夹中的 Products.mdf

任何想法为什么我可能会遇到这个问题?

0 投票
2 回答
400 浏览

.net - 如何在 NHibernate 中排队添加操作?

有没有办法在 NHibernate 中对“添加”操作进行排队,就像 Linq to SQL 和 Entity Framework 一样?

我想将实体添加到存储库,但我不想立即将其保存到数据库中,因为业务逻辑很复杂。我想在调用 ITransaction.Commit() 时提交所有更改,就像 Entity Framework 所做的那样。我可以这样做吗?

注意:我发现 NHibernate 会在我调用 ISession.Save() 方法后立即执行插入命令,这是意料之中的。

更新:我尝试将 FlushMode 设置为 Commit。但它仍然会立即保存实体,而不是在我调用 ITransaction.Commit() 时提交所有更改。

更新 2我在这里找到了原因http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-flushing:(一个例外是使用本机 ID 生成的对象在保存时被插入。)。所以我只能将Id生成器更改为“身份”以外的东西?没有其他类似EntityFramework中的解决方案吗?

0 投票
1 回答
1365 浏览

.net - 使用 WebSessionContext/CurrentSessionContext 延迟初始化 ISession

我正在使用 NHibernate 3 开始一个新项目,并且正在尝试将 CurrentSessionContext API 与 WebSessionContext 一起使用来管理我的 ISession 对象。

在以前的项目中,我总是自己管理,所以每当我需要一个 ISession 对象时,我都会创建它并存储在 HttpContext.Items 集合中。非常简单,但使用本机解决方案 (CurrentSessionContext) 似乎是这个新项目的最佳选择。

当我管理对象时,我能够对其进行延迟初始化,这意味着我只会在需要时打开一个会话,而不是在每个请求中打开它,因为我可能不需要它,并且打开它会浪费资源/时间时间。

有没有一种简单的方法可以使用 CurrentSessionContext API 做到这一点?

这是我在负责此操作的 HttpModule 中使用的代码:


编辑

Diego 几乎做到了,但我对此进行了更多思考,我记得我自己实现该控制的主要原因:事务。

我是洋葱架构师,所以我的域对象(知道何时开始事务的对象)无法访问基础设施,因此他们无法开始事务。

为了解决这个问题,我使用延迟初始化,并且总是在打开 Session 时启动事务。当请求结束并且没有捕获到异常时,就会发生提交。除此之外,Ayende 的建议是始终使用事务,即使在查询时也是如此。有什么想法吗?

0 投票
4 回答
900 浏览

nhibernate - NHibernate 多次加载同一个对象 - 请帮助!

我刚刚阅读了我的一个 ASP.NET 页面的跟踪,我注意到每次需要用户时都会从数据库中加载页面用户。由于每个ISession都应该缓存对象,因此我对此感到非常困惑。

从逻辑上讲,问题肯定是以下两件事之一:

  1. ISession缓存无法正常工作
  2. 每次请求用户时,都会使用不同的方式加载ISession

我认为问题是2)。我正在使用 Castle Windsor 来管理对象生命周期,因此我发布了一些我正在使用的代码,以防有人可以帮助发现问题。温莎城堡管理的课程有:

  1. MooseUserRepository- 用于管理 MooseUser 实例的存储库类(即本例中的页面用户)
  2. KctcUnitOfWork- ISession 的包装器

MooseUserRepository有这样的构造函数依赖KctcUnitOfWork

配置文件如下所示:

注意PerWebRequest生活方式。

Castle Windsor 容器只是一种称为实用程序类的静态属性,Moose.Application因此它始终存在:

页面本身有一个 IMooseUserRepository 实例,如下所示:

页面的用户由如下所示的属性访问:

这些后续调用似乎PageUser导致了重复的 SQL 命令:

现在显然我可以通过将加载的对象存储在私有变量中来解决这个问题MooseUser,但我的理解是ISession应该为我做这个。

任何人都可以冒险猜测出了什么问题吗?

0 投票
1 回答
1645 浏览

nhibernate - EF4 ObjectContext 与 NHibernate 会话

在潜入 EF4 之后,我正在尝试学习一些 NHibernate。NHibernate Session 相当于 EF4 ObjectContext(或 DbContext)吗?

具体来说,在 EF4 中,您从 ObjectContext(或 DbContext)派生,并且您的类包含每个实体的显式 ObjectSet,例如:

在我目前看到的 NHib 示例中,Session 对象没有以这种方式使用。我错过了什么吗?

0 投票
1 回答
1819 浏览

nhibernate - 在哪里可以找到 NHibernate ISession.Persist() 的文档?

NHibernate 的 ISession 公开了一个带有两个重载的 Persist() 方法。我在任何地方都找不到有关此方法的文档。它甚至没有在http://nhibernate.info/doc/nh/en/index.html上的 NHibernate 参考资料中提及。

这种方法是否已被弃用,还是会被弃用?它应该在什么时候使用?它与 SaveOrUpdate() 相比如何?

任何指针将不胜感激。

0 投票
2 回答
262 浏览

nhibernate - ActiveRecordBase.FindAll() 不允许一级缓存?

NHibernate 的一级缓存在使用相同会话时可用。ActiveRecordBase.FindAll()每次创建一个新的ISession. 所以这样的下面不能从一级缓存中获利:

有什么解决办法吗?