Как просмотреть сгенерированный SQL из Entity Framework? - PullRequest
10 голосов
/ 28 октября 2010

Как видно из заголовка, как мне просмотреть SQL, сгенерированный Entity Framework из моего кода? Я сталкиваюсь с ошибкой, когда происходит сбой EF, потому что поле создается базой данных (поле DateTime), и я подумал, что я установил его, чтобы он знал, что магазин генерирует его через StoreGeneratedPattern, но он все еще падает, поэтому я хотел бы увидеть, что именно он пытается подтолкнуть к базе данных.

P.S. Я использую EF только около часа ... Переключение с L2S.

Ответы [ 5 ]

16 голосов
/ 28 октября 2010

Поскольку у вас нет Sql Profiler, ваш лучший выбор будет LINQPad . Вы можете использовать существующую сборку.

Нажмите Add connection -> Use a typed data context from your own assembly -> Entity framework и выберите свою DLL.

Вы можете писать запросы напрямую к вашей модели (или копировать-вставлять из своего кода). Выберите вкладку SQL под окном запроса, чтобы просмотреть сгенерированный код SQL.

5 голосов
/ 28 октября 2010

Вы можете использовать Entity Framework Profiler (EFProf).Это не бесплатно, но есть 30-дневная пробная версия.Он делает гораздо больше полезных вещей, кроме показа вам операторов SQL.

3 голосов
/ 04 апреля 2011

Бесплатный AnjLab Sql Profiler будет работать, если настоящий SQL Profiler недоступен, потому что вы используете SQL Server Express: http://anjlab.com/en/projects/opensource/sqlprofiler. Он не так хорош, как реальная вещь, но выполняет работу достаточно хорошо.

3 голосов
/ 28 октября 2010

Как правило, вы всегда должны использовать SQL Profiler , чтобы увидеть операторы SQL, отправляемые EF в вашу базу данных.

Кроме того, я думаю, что вы неправильно поняли, что такое StoreGeneratedPattern. Если вы посмотрите на возможные значения внутри модели, вы увидите, что у нее есть идентификатор , что означает, что значение будет сгенерировано (базой данных), когда строка вставлена ​​и будет иначе не измениться. Другими параметрами являются Computed , которое указывает, что значение будет сгенерировано при вставках и обновлениях, и Нет , которое является значением по умолчанию ,
Таким образом, EF не будет генерировать это поле DateTime на лету для вас, вам нужно вручную создать его и затем обновить вашу модель из базы данных, чтобы EF сгенерировал соответствующие метаданные для работы с ним во время выполнения.

2 голосов
/ 28 октября 2010

Одним из решений будет захват сетевого трафика и просмотр данных на этом уровне. Microsoft Network Monitor отлично справляется с этой задачей.

Конечно, это работает, только если вы используете отдельный сервер БД и соединение не зашифровано.

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