Язык сообщений об ошибках Entity Framework SQL Server

Я работаю над приложением, использующим Entity Framework для доступа к данным. Для некоторых целей необходимо проанализировать сообщение SqlException для получения дополнительной информации. Я уже узнал, что это сообщение об исключении исходит непосредственно от SQL Server. Поэтому, чтобы этот процесс синтаксического анализа работал, мне нужно убедиться, что язык установлен на один и тот же язык во всех средах.

Я использую для установки языка

SET LANGUAGE English;

В целях тестирования я сделал следующее:

SET LANGUAGE English;
SELECT * FROM ABC;

ABC не существует, поэтому он явно не работает, и я получу сообщение об ошибке. В Management Studio мой ErrorMessage показывает это:

Язык сообщений об ошибках Entity Framework SQL Server

это на английском языке, как и предполагалось.

Теперь, когда я попробую то же самое на С#, я получу:

Язык сообщений об ошибках Entity Framework SQL Server

что на немецком.

Что мне не хватает? Любые идеи? Большое спасибо...

Я мало что знаю об EF, но если бы он открывал и закрывал соединение в методе ExecuteSqlCommand, это, безусловно, объясняло бы это, поскольку SET LANGUAGE имеет область сеанса.

Alex K. 29.05.2019 17:42

Почти уверен, что ExecuteSqlCommand запустит новый сеанс автоматической фиксации. Таким образом, ваш первый SET LANGUAGE практически не имеет никакого эффекта.

Steve 29.05.2019 17:53

Я думаю, что команда «SET LANGUAGE» используется только механизмом базы данных для правил сравнения и т. д. Вам нужно что-то на уровне EF, чтобы установить локальное сообщение об ошибке. Возможно, "CultureInfo.CurrentCulture = new CultureInfo("en-US");"

Steve Todd 29.05.2019 17:55

Изменение CurrentCulture не сработает, так как сообщение поступает непосредственно из SQLServer. Но да, выполнение его в одной команде работает.

feal 29.05.2019 17:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
262
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вместо того, чтобы делать это за два вызова ExecuteSqlCommand, вы должны сделать это за один.

string command = "SET LANGUAGE English; SELECT * FROM ABC;";
ctx.Database.ExecuteSqlCommand(command);

ExecuteSqlCommand запустит новый сеанс автоматической фиксации. Ваш первый SET LANGUAGE в значительной степени не имеет никакого эффекта, поскольку выбор находится в другом сеансе.

Да, это правильно Спасибо большое. Теперь мне нужно будет найти способ изменить язык при непосредственном запросе базы данных с помощью Entity Framework. Таким образом, ввод команды перед EF выполнит запрос.

feal 29.05.2019 17:59

Итак, с этим docs.microsoft.com/en-us/sql/database-engine/configure-windo‌​ws/… я могу установить его постоянно, и это решило проблему. Большое спасибо.

feal 29.05.2019 18:22

Другие вопросы по теме