пятница, 30 сентября 2011 г.

Использование контекста EF во времени

Меня давно интересовал такой вопрос: какой продолжительностью времени жизни должен обладать контекст Entity Framework?

И вот недавно я нашел ответ:
http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling

Если кратко, то каждый раз когда мы выполняем логическую (бизнес?) операцию, так как EF позаботится о сохранении всех метаданных и поэтому повторное создание контекста будет быстрым. В свою очередь DB provider должен позаботиться о пуле соединений.

пример:
using (SupplierServiceEntities Context = GetContext())
      {
        Session s = (from sess in Context.Sessions
               where sess.Sid == sid && EntityFunctions.AddMinutes(sess.DateOfLastAction, ExpireSessionTimeoutMinutes) > DateTime.Now
               select sess).FirstOrDefault();
        if (s != null)
          return true;

        return false;
      }


* This source code was highlighted with Source Code Highlighter.

пятница, 9 сентября 2011 г.

Компилированные запросы Linq (Compiled query) и ADO.Net 4.0

Многие пытаются сравнить производительность Entity Framework с чистым SQL. В любом случае запрос выполненный с помощью прямого SQL запроса будет быстрее чем использование LINQ хотя бы за счет маппинга полей.

Но эту разницу можно сократить до минимума. В EF 4.0 Linq запрос компилируются (разбираются) каждый раз когда к ним обращаются. Сама по себе эта операция дорогостоящая и мы должны от нее избавиться.

Делается это с помощью класса CompiledQuery