Pregunta

De manera predeterminada, la opción de conexión SQL Arithabort está desactivada para las conexiones OLEDB, que supongo que Linq a SQL está utilizando. Sin embargo, necesito que esté encendido. La razón es que mi DB contiene algunas vistas indexadas, y cualquier operación de inserción/actualización/eliminación contra tablas que forman parte de una vista indexada fallan si la conexión no tiene arithabort. Incluso se selecciona contra la vista indexada en sí fallan si se usa con la pista con (noexpand) (que debe usar en la edición estándar SQL para obtener el beneficio de rendimiento de la vista indexada).

¿Hay algún lugar en el contexto de datos en el que puedo especificar que quiero esta opción? ¿O en algún lugar del código puedo hacerlo?

He manejado una solución torpe, pero no me gusta ... Tengo que crear un procedimiento almacenado para cada operación select/inserción/actualización/eliminación, y en este proceso primero ejecuta arithabort, luego ejecutar otro proc en que contiene la selección/inserción real real/update/eliminar. En otras palabras, el primer proc es solo un envoltorio para el segundo. No funciona para simplemente colocar arithabort en el código Select/Insertar/Update/Eliminar.

¿Fue útil?

Solución

Lo que terminé haciendo fue escribir mi propio método en mi propia clase "ayudante" para crear el DataContext y usar esto cada vez que necesito un DataContext, por ejemplo,

      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)

La idea aquí es usar el constructor DataContext que toma una conexión como parámetro. Creo y abro una sqlconnection, ejecuto "establecer arithabort ..." en ella y lo paso al DC (el crédito va al póster aquí).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top