Как просмотреть сгенерированный SQL из Entity Framework?
Как говорится в заголовке, как мне посмотреть SQL, сгенерированный Entity Framework из моего кода? Я столкнулся с ошибкой, когда EF сбой, потому что поле генерируется базой данных (поле DateTime), и я подумал, что я задал ему вопрос о том, что хранилище генерирует его через StoreGeneratedPattern, но он все еще сбой, поэтому я хотел бы узнать, что именно он пытается подтолкнуть к базе данных.
P.S. Я использую EF только около часа... Переключение с L2S.
Ответы
Ответ 1
Поскольку у вас нет Sql Profiler, лучшим выбором будет LINQPad. Вы можете использовать существующую сборку.
Нажмите Add connection
→ Use a typed data context from your own assembly
→ Entity framework
и выберите свою DLL.
Вы можете писать запросы непосредственно против вашей модели (или скопировать-вставить из своего кода). Выберите вкладку SQL
'в окне запроса, чтобы просмотреть сгенерированный код SQL.
Ответ 2
Вы можете использовать Entity Framework Profiler (EFProf). Это не бесплатно, но есть 30-дневная пробная версия. Он делает гораздо более аккуратный материал, помимо того, что вы показываете инструкции SQL.
Ответ 3
Как правило, вы всегда должны использовать SQL Profiler, чтобы видеть инструкции SQL, которые были отправлены EF в вашу базу данных.
Кроме того, я думаю, вы не поняли, что такое StoreGeneratedPattern
. Если вы посмотрите на возможные значения внутри модели, вы увидите, что она имеет идентификатор, означающий, что значение будет генерироваться (по базе данных) при вставке строки и не изменится иначе. Другие параметры Вычислены, в которых указано, что значение будет генерироваться при вставках и обновлениях, и Нет, что по умолчанию.
Таким образом, EF не будет генерировать это поле DateTime на лету для вас, вам нужно вручную создать его, а затем обновить модель из базы данных, чтобы EF создавал соответствующие метаданные для работы с ней во время выполнения.
Ответ 4
Бесплатный AnjLab Sql Profiler будет работать, если реальный SQL Profiler недоступен, потому что вы используете SQL Server Express: http://anjlab.com/en/projects/opensource/sqlprofiler. Это не совсем так хорошо, как реальная вещь, но она делает работу достаточно хорошо.
Ответ 5
Одним из решений было бы захват сетевого трафика и просмотр данных на этом уровне. Microsoft Network Monitor хорошо справляется с этим.
Конечно, это работает только в том случае, если вы используете отдельный сервер БД, а соединение не зашифровано.