Приложение C # для стека вызовов базы данных MS SQL - PullRequest
0 голосов
/ 26 сентября 2018

Я унаследовал приложение C # с EFv4 / .net 4.0.

Анализируя некоторые вызовы БД с помощью SQL Server Profiler Я вижу некоторые неожиданные вызовы базы данных, исходящие из самого приложения (других пользователей нет,никакие другие приложения или процессы не смешиваются здесь).

У меня есть ситуация, когда к базе данных запускаются два точных запроса при отображении в диалоговом окне WinForm с запрашиваемой информацией.(По логике я хотел бы избежать второго вызова ... или хотя бы понять, откуда он берется).

Первый запрос запускается в конструкторе формы, где DataSource связывается с DbContext.ClassToShow .

Но второй запрос запускается где-то после отображения этой формы (ShowDialog ()).Но я не знаю, где именно ...

Итак, мой вопрос:

Где мне установить точку останова, чтобы остановить приложение до того, как EntityFramework вызовет какой-либо запрос?

Я пытался использовать свойство DbContext.ClassToShow, но оно останавливается только в первый раз.

РЕДАКТИРОВАТЬ:

Я пытался изменить способ назначения привязки:

siteBindingSource.DataSource = mDbContext.Site;

до:

var sites = new List<Site>(); var dbSites = mDbContext.Site; sites.AddRange(dbSites); siteBindingSource.DataSource = sites;

Также я заметил, что поиск в Visual Studio через сущность базы данных вызывает запросы к базе данных.

Все еще применяется тот же вопрос, как я могу различить различные места, к которым запрашивается база данных?

1 Ответ

0 голосов
/ 27 сентября 2018

Кажется, что система привязки данных может перечислять объект источника данных несколько раз.Каждое перечисление снова выполняет запрос.Объекты запроса Entity Framework не кэшируют свои результаты.

По этой причине вы должны материализовать запросы (например, используя ToList()).

Это также лучше по причинам обработки ошибок и управления транзакциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...