Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么EF core中的ExecuteSqlRaw()方法忽略了一些数据库关键字_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 为什么EF core中的ExecuteSqlRaw()方法忽略了一些数据库关键字

C# 为什么EF core中的ExecuteSqlRaw()方法忽略了一些数据库关键字,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,在Microsoft documentation here:中,它记录了当前保留的关键字 我的问题是,当我使用一个关键字“semanticsimilaritydetailstable”创建表时: CREATE TABLE semanticsimilaritydetailstable ( column_name_1 int, column_name_2 nvarchar, ); 首先,我直接在sql server中执行上述代码,将出现一个SqlException:“关键字's

在Microsoft documentation here:中,它记录了当前保留的关键字

我的问题是,当我使用一个关键字“semanticsimilaritydetailstable”创建表时:

CREATE TABLE semanticsimilaritydetailstable (
     column_name_1 int,
     column_name_2 nvarchar,
);
首先,我直接在sql server中执行上述代码,将出现一个SqlException:“关键字'semanticsimilaritydetailstable'附近的语法不正确”。这意味着我应该为表名添加“[]”,因为我正试图使用sql关键字来构建表

然后,我通过EF核心计算sql,如:

string sql = "CREATE TABLE semanticsimilaritydetailstable (
     column_name_1 int,
     column_name_2 nvarchar,
)";

xxDbContext.Database.ExecuteSqlRaw(sql);
名为“semanticsimilaritydetailstable”的表将成功创建。那么,为什么EF croe中会出现这种情况?(EF和ADO.NET中也是如此)

应该注意,如果表是以另一个保留关键字命名的,如WHERE、AND、COLUMN,以上述方式创建表都会引发相同的异常“关键字“xxx”附近的语法不正确”

下图显示了运行EF查询时发送到服务器的实际语句:

这种设计有什么特殊用途吗?或者可能是他们潜在的错误


期待您的回答。

运行SQL Profiler以捕获运行EF查询时发送到服务器的实际语句。很可能EF查询将与[]一起发送。嗨,Alex,谢谢你的回复。我已经运行了SQL分析器来捕获实际的语句,但不幸的是,表名中没有[]。这个“关键字”似乎只有在2016年才变成这样。如果您的某些测试发生在早于此的SQL Server实例上,则不会出现错误。检查
print@@version
的输出,查看您在中尝试的所有实例。谢谢,罗杰。根据您的建议,我检查了数据库兼容性级别。我发现我的一个数据库A的兼容性级别是2017,另一个数据库B的兼容性级别是2008。当我在SQLServer中直接执行代码时,我使用了数据库A,而在EF中,我错误地使用了数据库B。因此,这导致了上述不一致。谢谢你的回答!运行SQL Profiler以捕获在运行EF查询时发送到服务器的实际语句。很可能EF查询将与[]一起发送。嗨,Alex,谢谢你的回复。我已经运行了SQL分析器来捕获实际的语句,但不幸的是,表名中没有[]。这个“关键字”似乎只有在2016年才变成这样。如果您的某些测试发生在早于此的SQL Server实例上,则不会出现错误。检查
print@@version
的输出,查看您在中尝试的所有实例。谢谢,罗杰。根据您的建议,我检查了数据库兼容性级别。我发现我的一个数据库A的兼容性级别是2017,另一个数据库B的兼容性级别是2008。当我在SQLServer中直接执行代码时,我使用了数据库A,而在EF中,我错误地使用了数据库B。因此,这导致了上述不一致。谢谢你的回答!