NHibernate vs Entity Framework 5自动连接实体

时间:2013-04-10 12:56:20

标签: nhibernate orm entity-framework-5

最近我回到了关于企业应用程序的NHibernate与EF5的问题。 我知道许多重要的差异,但这对我来说是最令人惊讶的。 考虑两个经典实体,即客户和订单(1:n):

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和Session for 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);

}

1 个答案:

答案 0 :(得分:0)

从客户到订单(HasMany)的关系应该是反向的,这意味着,它是具有客户外键的订单端点。