Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Entity Framework & Profiler


Автор: Ronin08 6.3.2012, 16:48
Доброго времени суток! 

Может подскажете как получается так, что когда выполняю запрос через EF
Код

var query = context.RqstLsts; //RqstLsts - вьюха в базе

то в профайлере запрос выполняется 19 секунд, а когда выполняю тот же запрос который получил профайлер на вход в SQL Enterprise  Manager он выполняется меньше минуты

Автор: Ronin08 7.3.2012, 18:53
внесу уточнения.

В БД MS SQL есть вьюха RqstLst
Создаю модель Entity Framework на основе БД. В этой модели появляется сущность RqstLst

вот 2 примера выполнения одного и того же запроса

1 вариант
Код

public void MyMethod()
{
     context = new WaterMEntities();
     var query = context.RqstLst;
     dgRqstLst.ItemsSource = query;
}


2 вариант
Код

public void MyMethod()
{
    dgRqstLst.ItemsSource = this.GetRqstLst();
}

private IEnumerable<RqstLst> GetRqstLst()
{
        context = new WaterMEntities();
        string nativeSQLQuery = "SELECT  * " +
                                    "FROM dbo.RqstLst ";
        ObjectResult<RqstLst> requestes =
            context.ExecuteStoreQuery<RqstLst>(nativeSQLQuery);
        return requestes;
}

1 вариант выполняется 19сек, второй 1 сек. Смотрел через SQL Server Profiler/
Почему так?

Автор: Ronin08 7.3.2012, 23:32
Проблема не в запросе в накладных расходах связанных с загрузкой объектов в контекст. 
собственно надо было установить свойство MergeOption в MergeOption.NoTracking
Код

context = new WaterMEntities();
context.RqstLst.MergeOption = MergeOption.NoTracking; // in System.Data.Objects
var query = context.RqstLst;
dgRqstLst.ItemsSource = query;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)