Nhibernate-Linq:如何在会话结束后使用Iqueryable列表?

时间:2009-10-26 13:22:25

标签: linq nhibernate

是否可以在Session.Close之后获取列表,如下所示?

var bundles = session.Linq<Bundle>();
session.Close();
var bs = bundles.ToList();

我收到错误,是否有不同的语法?

2 个答案:

答案 0 :(得分:2)

你做不到。会话用于保持与数据库的连接。关闭会话后,您无法访问数据库

答案 1 :(得分:1)

看起来你正在以错误的方式解决这个问题。您需要使用UnitOfWork模式。 INSIDE你的工作单位是你用IQueriable做事的地方。你不能只传递一个IQueriable,因为它依赖于一个ISession。也许您的语法如下所示:

public void DoSomethingWithData()
{
    IList<Bundles> qbundles;
    using (var uof = new UnitOfWork())
    {
         IQueriable<Bundle> bundles = uof.Repository<Bundle>().Query();
         // just a litte example... replace with whatever
         qbundles = bundles.Where(b => b.Qty == 5).ToList()
    }
    ....
}

以下是一些可能让您开始使用此模式的链接:

http://web.archive.org/web/20090803155753/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/10/nhibernate-and-the-unit-of-work-pattern.aspx

http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx