EF4 ObjectContext与NHibernate会话

EF4 ObjectContext与NHibernate会话,nhibernate,session,entity-framework-4,objectcontext,isession,Nhibernate,Session,Entity Framework 4,Objectcontext,Isession,我试着在进入EF4之后学习一些NHibernate。等效于EF4 ObjectContext(或DbContext)的是NHibernate会话吗 具体来说,在EF4中,您从ObjectContext(或DbContext)派生,并且您的类包含每个实体的显式对象集,例如: public class EcommerceContext : ObjectContext { public ObjectSet<Customer> Customers {get; set;

我试着在进入EF4之后学习一些NHibernate。等效于EF4 ObjectContext(或DbContext)的是NHibernate会话吗

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

    public class EcommerceContext : ObjectContext {
        public ObjectSet<Customer> Customers {get; set;}
        public ObjectSet<Product> Products {get; set;}
        // etc.
    }
公共类电子商务上下文:ObjectContext{
公共对象集客户{get;set;}
公共对象集产品{get;set;}
//等等。
}

在到目前为止我看到的NHib示例中,会话对象不是这样使用的。我遗漏了什么吗?

如果您使用的是NHibernate 3,那么实现数据上下文就相当简单了

public class YourDataContext
{
    public ISession Session { get; private set; }
    public YourDataContext(ISession session)
    {
        Session = session;
    }

    public IQueryable<Customer> Customers
    {
        get
        {
            return Session.Query<Customer>();
        }
    }
}
公共类YourDataContext
{
公共ISession会话{get;private set;}
公共YourDataContext(ISession会话)
{
会话=会话;
}
公众可查询客户
{
得到
{
返回Session.Query();
}
}
}
在NHibernate 2中也可能出现同样的情况,但略有不同。您需要contrib模块中的NHibernate.Linq库

public class YourDataContext:NHibernateContext
    {
        public YourDataContext(ISession session)
            : base(session){}
        public IOrderedQueryable<Customer> Customers
        {
            get
            {
                return Session.Linq<Customer>();
            }
        }
    }
public类YourDataContext:NHibernateContext
{
公共YourDataContext(ISession会话)
:base(session){}
公共可查询客户
{
得到
{
return Session.Linq();
}
}
}
我猜,因为您询问的是您希望使用Linq的datacontext,如果是这样的话,您肯定应该使用NH3,因为Linq提供程序有了很大的改进

应该注意的是,EF中的datacontext和NH中的datacontext的行为将有所不同,因为NH不进行对象跟踪,而EF进行其他操作。当您了解它时,您将看到其他差异