C# 实体框架SQL Server错误消息语言

C# 实体框架SQL Server错误消息语言,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我正在开发一个利用实体框架进行数据访问的应用程序。出于某些目的,有必要解析SqlException消息以获取更多信息。我已经发现此异常消息直接来自SQL Server。因此,为了使解析过程正常工作,我需要确保语言在每个环境中都设置为相同的 我正在使用设置语言 SET LANGUAGE English; 出于测试目的,我做了以下工作: SET LANGUAGE English; SELECT * FROM ABC; ABC不存在,所以它显然会失败,我会收到一条错误消息。在Management

我正在开发一个利用实体框架进行数据访问的应用程序。出于某些目的,有必要解析SqlException消息以获取更多信息。我已经发现此异常消息直接来自SQL Server。因此,为了使解析过程正常工作,我需要确保语言在每个环境中都设置为相同的

我正在使用设置语言

SET LANGUAGE English;
出于测试目的,我做了以下工作:

SET LANGUAGE English;
SELECT * FROM ABC;
ABC不存在,所以它显然会失败,我会收到一条错误消息。在Management Studio中,我的错误消息显示:

这是应该用英语写的

现在,当我在C中尝试同样的方法时,我将得到:

这是德语的


我错过了什么?有什么想法吗?非常感谢…

不要在两个ExecuteSqlCommand调用中执行此操作,而应该在一个调用中执行

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

ExecuteSqlCommand将启动新的自动提交会话。由于select正在另一个会话中,所以您的第一套语言几乎没有任何效果

我对EF了解不多,但如果要在ExecuteSqlCommand方法中打开和关闭连接,这肯定会解释为SET语言具有会话作用域。非常确定ExecuteSqlCommand将启动新的自动提交会话。因此,您的第一个SET语言几乎没有效果。我认为SET语言命令仅由数据库引擎用于比较规则等。您需要EF级别的东西来设置本地错误消息。也许CultureInfo.CurrentCulture=新的CultureInfo通知我们;更改CurrentCulture将不起作用,因为消息直接来自SQLServer。但是,是的,在一个命令中执行它是有效的。是的,这是正确的,非常感谢。现在,我需要找到一种方法来更改使用实体框架直接查询数据库时的语言。所以在EF之前注入命令将执行查询。好的,这样我就可以永久设置它,解决了这个问题。非常感谢。