我是 NHibernate 的新手(我的第一个大项目)。
我一直在使用一种简单的数据访问方法,通过在 using 块中创建 ISession 对象来抓取我的对象或对象列表,并且在退出代码块后会话被销毁。
但是,这在需要延迟加载的情况下不起作用。
例如,如果我有一个 Customer 对象,它的属性是 Orders 的集合,那么当尝试延迟加载时,我会收到 Hibernate 异常。
有人使用不同的方法吗?
我是 NHibernate 的新手(我的第一个大项目)。
我一直在使用一种简单的数据访问方法,通过在 using 块中创建 ISession 对象来抓取我的对象或对象列表,并且在退出代码块后会话被销毁。
但是,这在需要延迟加载的情况下不起作用。
例如,如果我有一个 Customer 对象,它的属性是 Orders 的集合,那么当尝试延迟加载时,我会收到 Hibernate 异常。
有人使用不同的方法吗?
查看SummerOfNHibernate网络广播以获得很棒的教程……您要寻找的具体内容要到网络剧集 5 或 6 才会出现。
让您的会话对您的整个工作单元保持开放。如果您的会话寿命太小,您将无法从会话级缓存中受益(这很重要)。任何时候您可以防止往返数据库都将节省大量时间。您也不能利用延迟加载,这对于理解至关重要。
如果您的会话生命周期过长,您可能会遇到其他问题。
如果这是一个 Web 应用程序,您可能会很好地使用 session-per-httpRequest 模式。基本上这是一个 HttpModule,它在请求开始时打开会话并在结束时刷新/关闭。请务必将会话存储在 HttpContext.Items NOT A STATIC VARIABLE 中。<--- 导致各种你不想处理的问题。
您还可以查看RhinoCommons的工作单元实现。
由于您正在开发 Web 应用程序(可能使用 ASP.NET),请查看 CodeProject 的NHibernate Best Practices with ASP.NET。