如何在Linq中对实体设置算术中止

本文关键字:设置 实体 Linq | 更新日期: 2023-09-27 18:12:41

我找到了很多关于如何在Linq到SQL中设置算术中止的答案,但在Linq到实体中没有。在Linq to SQL中,可以这样做:

using (var conn = new SqlConnection(connectionString)){
  cmd = conn.CreateCommand();
  cmd.Connection.Open();
  cmd.CommandText = "set arithabort on;";
  cmd.ExecuteNonQuery(); // Line 5
  using (var db = new MyDataContext(conn)) {
    ...
  }
}

但是如果我做完全相同的事情,只是用上面代码片段中的SqlConnection替换EntityConnection,我在第5行得到一个运行时错误:

查询语法无效。在标识符'arithabort'附近,第1行,第5列。

我猜它连接到事实,Linq2Sql是硬连线的SQL Server,而EF可以在其他db上工作。那么诀窍是什么呢?

如何在Linq中对实体设置算术中止

SqlConnection不是特定于linq-to-sql或EF,您仍然可以使用EF的代码。但是您必须创建一个接收SqlConnection的EntityConnection。

EntityConnection.CreateCommand创建一个EntityCommand,它期望实体SQL作为命令文本,而不是原始SQL命令。

另一种选择是使用上下文的ExecuteStoreQuery命令(ObjectContext),或context.Database.ExecuteSqlCommand (DbContext)。