Linq to sql 如何为Linq to SQL中的连接设置arithaport

Linq to sql 如何为Linq to SQL中的连接设置arithaport,linq-to-sql,arithabort,Linq To Sql,Arithabort,默认情况下,OLEDB连接的SQL连接选项ARITHABORT处于禁用状态,我假设Linq To SQL正在使用该选项。但是我需要它在上面。原因是my DB包含一些索引视图,如果连接未启用ARITHABORT,则对索引视图中的表执行的任何插入/更新/删除操作都会失败。如果使用WITH(NOEXPAND)提示(必须在SQL标准版中使用该提示才能获得索引视图的性能优势),则即使针对索引视图本身的选择也会失败 在数据上下文中是否有可以指定此选项的位置?或者在代码中的某个地方我可以做到 我做了一个笨拙的

默认情况下,OLEDB连接的SQL连接选项ARITHABORT处于禁用状态,我假设Linq To SQL正在使用该选项。但是我需要它在上面。原因是my DB包含一些索引视图,如果连接未启用ARITHABORT,则对索引视图中的表执行的任何插入/更新/删除操作都会失败。如果使用WITH(NOEXPAND)提示(必须在SQL标准版中使用该提示才能获得索引视图的性能优势),则即使针对索引视图本身的选择也会失败

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


我做了一个笨拙的变通办法,但我不喜欢。。。。我必须为每个select/insert/update/delete操作创建一个存储过程,在此过程中,首先运行SET ARITHABORT ON,然后执行另一个包含实际select/insert/update/delete的过程。换句话说,第一个进程只是第二个进程的包装器。在select/insert/update/delete代码上方设置SET-ARITHABORT是不起作用的。

我最后做的是在自己的“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(信用卡归poster)。

您使用的是哪个版本的SQL Server?如果早于SQL2000,则不应关心此问题,除非
ANSI_WARNINGS
也处于关闭状态(除非数据库处于SQL 2000兼容级别)其SQL 2005。是的,对于通过Management Studio运行的手动查询,它会自动打开,但OLEDB已将其关闭(因此,如果您正在编写应用程序,则应用程序的SQL连接的设置将关闭)。Laurence,您确定OLE DB连接显式关闭此设置吗?的文档中没有说明它是这样做的(也没有说明
NUMERIC\u ROUNDABORT
),但说明了其他选项是为ODBC和OLE DB客户端明确说明的。我通过.NET(OLE DB)和SQLCMD.EXE(ODBC)进行了测试,它们都不需要任何
ARITHABORT
设置,以便我选择和更新索引视图。在按照回答中的说明执行helper类之前,您是否遇到错误?对索引视图(而不是视图本身)中的表运行insert/update/delete操作时发生异常。我只能说我在LINQtoSQL中遇到了这个问题,后来在实体框架中也遇到了这个问题。我在保持连接打开时遇到了这个问题。你碰到这个了吗?我能做些什么来避免这个。不,对不起,我没有得到那个问题。也许看看您是否正在处理datacontext?