2

在潜入 EF4 之后,我正在尝试学习一些 NHibernate。NHibernate Session 相当于 EF4 ObjectContext(或 DbContext)吗?

具体来说,在 EF4 中,您从 ObjectContext(或 DbContext)派生,并且您的类包含每个实体的显式 ObjectSet,例如:

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

在我目前看到的 NHib 示例中,Session 对象没有以这种方式使用。我错过了什么吗?

4

1 回答 1

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 的数据上下文,如果是这种情况,您绝对应该使用 NH3,因为 linq 提供程序得到了很大改进。

应该注意的是,EF 中的数据上下文和 NH 中的数据上下文的行为会有所不同,因为 NH 不执行对象跟踪,而 EF 执行等等。当您了解它时,您会看到其他差异。

于 2011-01-10T00:20:33.767 回答