2013-04-10 34 views
3

最近我回到了NHibernate vs EF5的企業應用程序的問題。 我知道很多重要的區別,但是這對我來說是最令人驚訝的。 考慮兩個經典的實體,客戶和訂單(1:N):NHibernate vs Entity Framework 5自動連接實體

public class Customer 
{ 
    public Customer() 
    { 
     Orders = new HashSet<Order>(); 
    } 

public virtual Guid Id { get; set; } 
public virtual string Name { get; set; } 

    **public virtual ICollection<Order> Orders { get; set; }** 
} 

public class Order 
{ 
public virtual Guid Id { get; set; } 
public virtual Guid CustomerId { get; set; } 
public virtual string Number { get; set; } 
public virtual DateTime Date { get; set; } 

    **public virtual Customer Customer { get; set; }** 
} 

對於這兩種NHibernate和EF5有雙向映射。 代碼片段相應加載所有客戶的所有訂單中的DbContext的背景和會話EF5和NHibernate:

 using (TestOrmForDalDbEntities context = new TestOrmForDalDbEntities()) 
     { 
      context.Configuration.ProxyCreationEnabled = false; 

      IQueryable<Customer> customers = context.Customers; 
      customers.Load(); 

      IQueryable<Order> orders = context.Orders; 
      orders.Load(); 
     } 



using (ISession session = _sessionFactory.OpenSession()) 
{ 
    var customers = session.Query<Customer>().ToList(); 
    var orders = session.Query<Order>().ToList(); 

}

結果是:

EF5:每個客戶都有集合適當的訂單(EF5自動連接它們) NHibernate:客戶都沒有收集適當的訂單。即使每個訂單都鏈接到適當的客戶。

問題是:NHibernate的想法是不是以這種方式連接,或者是我不知道如何配置NHibernate?

P.S. NHibernate的映射:

public class CustomerMap : ClassMap<Customer> 
{ 
    public CustomerMap() 
    { 
     Id(x => x.Id).UnsavedValue(Guid.Empty).GeneratedBy.Guid(); 
     Map(x => x.Name); 
     HasMany(x => x.Orders).Cascade.All(); 
    } 
} 

public OrderMap() 
    { 
     Id(x => x.Id).UnsavedValue(Guid.Empty).GeneratedBy.Guid(); 
     Map(x => x.Number); 
     Map(x => x.Date); 
     Map(x => x.CustomerId); 
     References(x => x.Customer); 

}

+0

在你的映射中,在nhibernate示例中很可能有錯誤。你能否展示你的映射? – 2013-04-10 13:03:05

+1

2 Mattias:我添加了映射 – 2013-04-10 13:32:41

+1

就像一個實驗一樣,您是否可以刪除NH測試的CustomerId映射。 (在我看來)有一種遙遠的可能性,它可能會有所幫助。 – 2013-07-29 08:02:07

回答

0

從客戶到訂單(的hasMany)的關係應該是逆,這意味着,它是具有外鍵的客戶訂單端點。

相關問題