如何在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上工作。那么诀窍是什么呢?
SqlConnection
不是特定于linq-to-sql或EF,您仍然可以使用EF的代码。但是您必须创建一个接收SqlConnection的EntityConnection。
EntityConnection.CreateCommand
创建一个EntityCommand
,它期望实体SQL作为命令文本,而不是原始SQL命令。
另一种选择是使用上下文的ExecuteStoreQuery
命令(ObjectContext),或context.Database.ExecuteSqlCommand
(DbContext)。