EF4 ObjectContext против NHibernate Session - PullRequest
2 голосов
/ 10 января 2011

Я пытаюсь изучить NHibernate после погружения в EF4.Является ли эквивалент ECon4 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 Ответ

4 голосов
/ 10 января 2011

Если вы используете 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, но немного по-другому.Вам понадобится библиотека NHibernate.Linq, которая находится в модулях contrib.

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 делает, средидругие вещи.Когда вы узнаете об этом, вы увидите другие различия.

...