Question

Par défaut, l'option connexion SQL ARITHABORT est désactivée pour les connexions OLEDB, que je suppose LINQ to SQL utilise. Cependant, je besoin d'être allumé. La raison est que mon DB contient des vues indexées, ainsi que tout élément / mise à jour / suppression des opérations sur des tables qui font partie d'une vue indexée échoue si la connexion ne pas ARITHABORT ON. Même contre la sélectionne vue indexée lui-même échouer si le WITH (NOEXPAND) est utilisé (que vous devez utiliser dans SQL Standard Edition pour obtenir le bénéfice de la performance de la vue indexée).

Y at-il quelque part dans le contexte de données que je peux préciser que je veux cette option? Ou quelque part dans le code que je peux le faire ??

J'ai réussi une solution maladroite, mais je ne l'aime pas .... Je dois créer une procédure stockée pour chaque sélection / insertion / mise à jour / suppression, et dans ce proc d'abord exécuter SET ARITHABORT ON, puis exec un autre proc qui contient la sélection réelle / insertion / mise à jour / suppression. Autrement dit, le premier proc est juste un emballage pour le second. Il ne fonctionne pas à simplement mettre arithabort Above select / insertion / mise à jour / code de suppression.

Était-ce utile?

La solution

Ce que je fini par faire était d'écrire ma propre méthode dans ma propre classe « aide » pour créer le datacontext et en utilisant chaque fois que je besoin d'un datacontext, par exemple.

      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)

L'idée ici est d'utiliser le constructeur de datacontext qui prend une connexion en tant que paramètre. Créer et ouvrir un SqlConnection, exécutez « arithabort ... » là-dessus, et le transmettre à la DC (le crédit va à l'affiche ici ).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top