2

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オブジェクトはこのように使用されていません。私は何かが足りないのですか?

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を使用しようとしているデータコンテキストについて質問しているので、推測しています。その場合は、linqプロバイダーが大幅に改善されているため、NH3を使用する必要があります。

とりわけ、NHはオブジェクトラッキングを行わず、EFは行うため、EFのデータコンテキストとNHのデータコンテキストは異なる動作をすることに注意してください。あなたがそれについて学ぶとき、あなたは他の違いを見るでしょう。

于 2011-01-10T00:20:33.767 に答える