5

我是 NHibernate 的新手(我的第一个大项目)。
我一直在使用一种简单的数据访问方法,通过在 using 块中创建 ISession 对象来抓取我的对象或对象列表,并且在退出代码块后会话被销毁。

但是,这在需要延迟加载的情况下不起作用。
例如,如果我有一个 Customer 对象,它的属性是 Orders 的集合,那么当尝试延迟加载时,我会收到 Hibernate 异常。
有人使用不同的方法吗?

4

4 回答 4

2

查看SummerOfNHibernate网络广播以获得很棒的教程……您要寻找的具体内容要到网络剧集 5 或 6 才会出现。

于 2008-08-28T15:43:20.287 回答
1

让您的会话对您的整个工作单元保持开放。如果您的会话寿命太小,您将无法从会话级缓存中受益(这很重要)。任何时候您可以防止往返数据库都将节省大量时间。您也不能利用延迟加载,这对于理解至关重要。

如果您的会话生命周期过长,您可能会遇到其他问题。

如果这是一个 Web 应用程序,您可能会很好地使用 session-per-httpRequest 模式。基本上这是一个 HttpModule,它在请求开始时打开会话并在结束时刷新/关闭。请务必将会话存储在 HttpContext.Items NOT A STATIC VARIABLE 中。<--- 导致各种你不想处理的问题。

您还可以查看RhinoCommons的工作单元实现。

于 2008-08-28T15:43:02.860 回答
0

由于您正在开发 Web 应用程序(可能使用 ASP.NET),请查看 CodeProject 的NHibernate Best Practices with ASP.NET

于 2008-09-09T18:16:58.320 回答