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等等。當你瞭解它時,你會看到其他的不同之處。