我已经找到了大量关于如何在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)) {
...
}
}
但如果我做同样的事情,只需在上面的代码片段中替换EntityConnection
中的SqlConnection
,我就会在第5行遇到运行时错误:
查询语法无效。标识符'arithabort',第1行,第5列附近。
我猜测它与Linq2Sql硬连线的事实有关,而EF可以在其他数据库上工作。那么诀窍是什么?
答案 0 :(得分:2)
SqlConnection
并非特定于linq-to-sql或EF,您仍然可以使用EF代码。但是您必须创建一个接收SqlConnection的EntityConnection。
EntityConnection.CreateCommand
创建一个EntityCommand
,它期望Entity SQL作为命令文本,没有原始SQL命令。
另一种方法是使用上下文的ExecuteStoreQuery
命令(ObjectContext)或context.Database.ExecuteSqlCommand
(DbContext)。