Как установить ARITHABORT ON для соединений в Linq To SQL - PullRequest
3 голосов
/ 04 июня 2010

По умолчанию опция SQL-соединения ARITHABORT отключена для OLEDB-соединений, которые, как я предполагаю, использует Linq To SQL. Однако мне нужно, чтобы он был включен. Причина в том, что моя БД содержит некоторые индексированные представления, и любые операции вставки / обновления / удаления для таблиц, которые являются частью индексированного представления, завершаются неудачно, если для соединения не установлено ARITHABORT ON. Даже выбор в отношении самого индексированного представления завершится неудачно, если используется подсказка WITH (NOEXPAND) (которую необходимо использовать в SQL Standard Edition, чтобы получить выигрыш в производительности индексированного представления).

Есть ли где-то в контексте данных, который я могу указать, я хочу, чтобы эта опция была включена? Или где-то в коде я могу это сделать ??

Я справился с неуклюжим обходным решением, но мне это не нравится .... Мне нужно создать хранимую процедуру для каждой операции выбора / вставки / обновления / удаления, и в этом процессе сначала запустите SET ARITHABORT ON, затем exec другой процесс, который содержит фактический выбор / вставка / обновление / удаление. Другими словами, первый процесс - это просто обертка для второго. Не получается просто установить SET ARITHABORT ON над кодом выбора / вставки / обновления / удаления.

1 Ответ

3 голосов
/ 16 июня 2010

Я закончил тем, что написал свой собственный метод в своем собственном "вспомогательном" классе для создания текстового контекста данных и использовал его каждый раз, когда мне нужен текстовый текст данных, например,

      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 (кредит идет на плакат здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...