2

我试图学习一些NHibernate潜入EF4后。相当于EF4 ObjectContext(或DbContext)的NHibernate会话吗?EF4的ObjectContext与NHibernate会话

具体来说,在EF4,你从ObjectContext的(或的DbContext)派生和你的类包含每个实体的明确的对象集的,例如:

public class EcommerceContext : ObjectContext { 
     public ObjectSet<Customer> Customers {get; set;} 
     public ObjectSet<Product> Products {get; set;} 
     // etc. 
    } 

在NHib例子到目前为止,我所看到的,会话对象不是用这种方式。我错过了什么吗?

回答

4

如果您使用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>(); 
     } 
    } 
} 

在NHibernate 2中可能有同样的情况,但稍有不同。您将需要contrib模块中的NHibernate.Linq库。

public class YourDataContext:NHibernateContext 
    { 
     public YourDataContext(ISession session) 
      : base(session){} 
     public IOrderedQueryable<Customer> Customers 
     { 
      get 
      { 
       return Session.Linq<Customer>(); 
      } 
     } 
    } 

我猜,因为你问的是你正在寻找使用Linq一个DataContext,如果是那样的话,你一定要使用NH3作为LINQ提供程序大为改善。

应该注意的是,EF中的datacontext和NH中的datacontext会有不同的表现,因为NH不会进行对象跟踪,EF等等。当你了解它时,你会看到其他的不同之处。