Немного предыстории, прежде чем я объясню проблему.
У меня есть механизм ведения журнала, который регистрирует
- Начало и конец запросов Http
- Запросы, которые Entity Framework выполняет
ИтакЯ создаю простой «AllowAnonymous» метод действия MVC, который запускает один простой Entity Framework Query.Я отправляю это на наш сервер DEV, захожу в браузер и вызываю этот метод действия.Проверьте логи, я вижу 1 Http-запрос и 1 запрос выполнен.Отлично!
[AllowAnonymous]
public ActionResult GetInvoiceById(int InvoiceId)
{
JsonResult mJson = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet };
try
{
var inv = GetInvoice(InvoiceId);
mJson.Data = inv;
}
catch (Exception ex)
{
throw;
}
return mJson;
}
public InvoiceViewModel GetInvoice(int InvoiceId)
{
var inv = Context.Invoices.Where(m => m.InvoiceId == InvoiceId)
.Select(s => new InvoiceViewModel()
{
InvoiceId = s.InvoiceId,
StatusId = s.StatusId,
AttachmentTypeId = s.TypeId,
ContentId = s.ContentId,
CreatedDate = s.CreatedDate,
UpdatedDate = s.UpdatedDate
}).FirstOrDefault();
return inv ?? new InvoiceViewModel();
}
Теперь я хотел загрузить тестирование этого метода действия.Для этого я использовал Netling .
Поэтому я провел нагрузочный тест на 1 потоке в течение 60 секунд.Таким образом, он делает последовательные вызовы метода действия в течение 60 секунд.И вот результаты теста.
Netling сообщил (что я подтвердил из моих журналов), что он выполнил 345 запросов.Но число раз, когда Entity Framework выполнял запрос, составляет 399 раз.Так что каким-то образом Entity Framework выполняет запрос более одного раза для нескольких запросов.Я делаю только один звонок за раз, и на сервере DEV нет никого, кроме меня.
Дополнительные примечания. Иногда я вижу, что количество соединений, которые EF открывал и закрывал, равно количеству запросов, а иногда - числу выполнений запроса.Но всякий раз, когда я загружаю тест, количество выполнений запросов больше, чем количество запросов.Если я увеличу количество потоков, то также увеличится разрыв между количеством запросов и числом выполнений запросов.
Мой вопрос: если это еще не очевидно, количество запросов ( 345 ) должно соответствовать количеству выполненных запросов ( 399 ).Но это не так, это означает, что для некоторых запросов запрос выполняется несколько раз.Зачем?И как я могу это исправить?