EF4 ObjectContext 与 NHibernate 会话

发布于 2024-10-11 07:34:31 字数 459 浏览 2 评论 0原文

在深入研究 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 对象并未以这种方式使用。我错过了什么吗?

I'm trying to learn some NHibernate after diving into EF4. Is the equivalent of the EF4 ObjectContext (or DbContext) the NHibernate Session?

Specifically, in EF4, you derive from ObjectContext (or DbContext) and your class contains explicit ObjectSet's of each entity, for example:

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

In the NHib examples I've seen so far, the Session object isn't used this way. Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

勿忘心安 2024-10-18 07:34:31

如果您使用 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 则执行其他操作。当您了解它时,您会发现其他差异。

If you're using NHibernate 3 it's fairly trivial to implement a data context.

public class YourDataContext
{
    public ISession Session { get; private set; }
    public YourDataContext(ISession session)
    {
        Session = session;
    }

    public IQueryable<Customer> Customers
    {
        get
        {
            return Session.Query<Customer>();
        }
    }
}

The same thing is possible in NHibernate 2 but slightly different. You will need the NHibernate.Linq library which is in the contrib modules.

public class YourDataContext:NHibernateContext
    {
        public YourDataContext(ISession session)
            : base(session){}
        public IOrderedQueryable<Customer> Customers
        {
            get
            {
                return Session.Linq<Customer>();
            }
        }
    }

I'm guessing since you're asking about a datacontext that you're looking to use Linq, and if that's the case, you should definitely use NH3 as the linq provider is much improved.

It should be noted that a datacontext in EF and a datacontext in NH are going to behave differently because NH does not do objectracking and EF does, among other things. You'll see other differences as you learn about it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文