如何为Linq To SQL中的连接设置ARITHABORT ON

时间:2010-06-03 23:20:56

标签: linq-to-sql arithabort

默认情况下,对于OLEDB连接,SQL连接选项ARITHABORT为OFF,我假设Linq To SQL正在使用它。但是我需要它开启。原因是我的数据库包含一些索引视图,如果连接没有ARITHABORT ON,则对作为索引视图一部分的表的任何插入/更新/删除操作都将失败。如果使用WITH(NOEXPAND)提示(即必须在SQL Standard Edition中使用以获得索引视图的性能优势),甚至对索引视图本身的选择也会失败。

我可以指定数据上下文中的某个位置我希望此选项打开吗?或者代码中的某个地方我可以做到吗?

我管理了一个笨拙的解决方法,但我不喜欢它....我必须为每个select / insert / update / delete操作创建一个存储过程,并在此proc中首先运行SET ARITHABORT ON,然后执行另一个包含实际select / insert / update / delete的proc。换句话说,第一个proc只是第二个proc的包装器。将SET ARITHABORT置于选择/插入/更新/删除代码之上是不行的。

1 个答案:

答案 0 :(得分:3)

我最终做的是在我自己的“helper”类中编写自己的方法来创建datacontext并在每次需要datacontext时使用它,例如

      Dim conn As New SqlConnection(Config.GetConnectionString("SiteSqlServer"))
      Dim command As New SqlCommand("set arithabort on;", conn)
      command.Connection.Open()
      command.ExecuteNonQuery()
      Dim dc = New SiteDataContext(conn)

这里的想法是使用将连接作为参数的datacontext构造函数。我创建并打开一个SqlConnection,在其上运行“set arithabort ...”,并将其传递给DC(信用转到海报here)。