如何在Linq中将Arithabort设置为实体?

我已经找到了很多关于如何在Linq中将Arithabort设置为SQL的答案,但在Linq to Entities中没有任何答案。 在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硬连线的事实有关,而EF可以在其他数据库上工作。 那么诀窍是什么?

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

EntityConnection.CreateCommand创建一个EntityCommand ,它将Entity SQL作为命令文本,而不是原始SQL命令。

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