我在退出Linq for NHibernate 2.1在ASP.NET MVC应用程序中使用,我试图找出会话管理。作为第一个实验,我试图从Pro ASP.NET MVC Framework修改SportsStore应用程序。这个示例应用程序使用Linq到Sql,所以我认为这将是一个很好的练习。我有NHibernate 2.1访问数据库和非Linq查询工作正常。NHibernate Linq会话管理
在Linq to SQL中,我们可以根据数据上下文和连接字符串创建一个IQueryable对象,该对象可以传递并使用,而不用担心维护任何上下文。 因此,例如,原来的产品库代码读取类似:
public IQueryable<Product> Products
{
get { (new DataContext(_connectionString)).GetTable<Product>();
}
和应用程序使用返回的IQueryable填充产品列表,检索产品细节等
在NHibernate中的LINQ同样采用数据背景但不是一个连接字符串,我们提供的是必须保持的范围会话对象,而IQueryable的是使用:
IQueryable<Product> products = new SportsStoreContext(session).Products;
所以我不知道我应该如何来管理会话,而不对示例应用程序的结构做了太多的暴力行为。理想情况下,我想要一个解决方案,使我可以用NHibernate Linq替换Linq到Sql代码,只做本地更改。
NHibernate会话实现IDisposable,大多数NHibernate示例演示使用{}构造的会话管理,但此策略在此处不起作用。 This thread讨论了一些不同的方法,S#arp Architecture和HybridSessionBuilder。有没有人用这些来用NHibernate Linq替换Linq到Sql?还有其他方法可以更好地工作吗?
**编辑 mausch有它的权利 - 通常的做法是使用httpmodule。 NHibernate in Action描述了两种执行此操作的方法:会话每请求(p334)和会话每会话(p340)。后者允许您跨多个http请求重用持久性实例。除了mausch提供的链接之外,NHibernate in Action还提到了NHibernate Burrow,Castle ActiveRecord和Rhino Tools。
对,你是mausch。我正在尝试使用代码和阅读NHibernate in Action中的代码。我刚刚通过了第10章(持久化的架构模式),他们也描述了这种模式。 – keithm 2009-07-30 22:31:03