2

Ich versuche, einige NHibernate nach dem Tauchen in EF4 zu lernen. Entspricht der EF4 ObjectContext (oder DbContext) der NHibernate-Sitzung?EF4 ObjectContext vs NHibernate Sitzung

Insbesondere in EF4, leiten Sie von Object (oder DbContext) und Ihre Klasse enthält explizite ObjectSet der jeder Einheit, zum Beispiel:

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

In den NHib Beispiele, die ich bisher gesehen habe, die Session Objekt wird nicht auf diese Weise verwendet. Fehle ich etwas?

Antwort

4

Wenn Sie NHibernate 3 verwenden, ist es ziemlich trivial, einen Datenkontext zu implementieren.

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

    public IQueryable<Customer> Customers 
    { 
     get 
     { 
      return Session.Query<Customer>(); 
     } 
    } 
} 

Das gleiche ist in NHibernate 2 möglich, aber etwas anders. Sie benötigen die NHibernate.Linq-Bibliothek, die sich in den contrib-Modulen befindet.

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

Ich vermute, da Sie über eine Datacontext sind gefragt, die Sie suchen Linq zu verwenden, und wenn das der Fall ist, sollten Sie auf jeden Fall nutzen NH3 als Linq-Anbieter stark verbessert.

Es sollte beachtet werden, dass ein Datenkontext in EF und ein Datenkontext in NH sich anders verhalten, weil NH nicht Objectracking und EF unter anderem tut. Sie werden andere Unterschiede sehen, wenn Sie etwas darüber erfahren.