在尝试进入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对象不是以这种方式使用的。我错过了什么吗?
答案 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会做其他事情。当你了解它时,你会看到其他的差异。