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);
}
在你的映射中,在nhibernate示例中很可能有錯誤。你能否展示你的映射? – 2013-04-10 13:03:05
2 Mattias:我添加了映射 – 2013-04-10 13:32:41
就像一個實驗一樣,您是否可以刪除NH測試的CustomerId映射。 (在我看來)有一種遙遠的可能性,它可能會有所幫助。 – 2013-07-29 08:02:07