EF4 ObjectContext vs NHibernate Session

时间:2011-01-10 00:08:25

标签: nhibernate session entity-framework-4 objectcontext isession

在尝试进入EF4后,我正在尝试学习一些NHibernate。相当于EF4 ObjectContext(或DbContext)的NHibernate会话吗?

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

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

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

1 个答案:

答案 0 :(得分: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的datacontext,如果是这样的话,你肯定应该使用NH3作为linq提供者得到很大改善。

应该注意的是,EF中的datacontext和NH中的datacontext的行为会有所不同,因为NH不会进行对象跟踪,而EF会做其他事情。当你了解它时,你会看到其他的差异。