3

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

数据上下文中是否有我可以指定我想要此选项的地方?或者我可以在代码中的某个地方做到这一点?

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

4

1 回答 1

3

我最终做的是在我自己的“助手”类中编写自己的方法来创建数据上下文,并在每次需要数据上下文时使用它,例如

      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(归功于此处的海报)。

于 2010-06-15T22:17:53.133 回答