Что такое хороший способ использования LINQ To SQL для обновления нескольких таблиц через представление? - PullRequest
1 голос
/ 01 мая 2009

У меня есть представление, и оно состоит из двух таблиц. Я хочу отредактировать значение в каждой таблице через представление и сохранить эти изменения, но LINQ выдает ошибку о невозможности изменить два значения в одном представлении.

Кто-нибудь знает хороший обходной путь?

Спасибо

Ответы [ 3 ]

5 голосов
/ 01 мая 2009

SQLServer не поддерживает обновление столбцов из нескольких таблиц в представлении. Возможно, вам удастся обойти это, отделив изменения столбцов, чтобы вы только обновляли столбцы в одной таблице, отправляли свои изменения, обновляли изменения в другой таблице, а затем снова отправляли изменения. Вы также можете использовать хранимую процедуру для независимого обновления отдельных таблиц в одной и той же транзакции. Эта хранимая процедура может быть добавлена ​​в качестве метода в ваш контекст данных с помощью конструктора. Предполагая, что при завершении он возвращает ту же схему, что и представление, он может вернуть объект того же типа, что и представление.

Ссылка

Обновляемые виды Вы можете изменить данные базовой базовой таблицы через представление, пока выполняются следующие условия:

Любые модификации, включая ОБНОВЛЕНИЕ, Операторы INSERT и DELETE должны справочные столбцы только с одной базы Таблица. Столбцы изменяются в вид должен напрямую ссылаться на основные данные в столбцах таблицы. Столбцы не могут быть получены в любом другой способ, например, через следующее: агрегатная функция: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR и VARP. вычисление. Столбец не может быть вычисляется из выражения, которое использует другие столбцы. Колонны, которые формируются с помощью набора операторов UNION, UNION ALL, CROSSJOIN, ЗА ИСКЛЮЧЕНИЕМ, и ИНТЕРСЕКТ количество для расчета и также не обновляются. Колонны на изменение не влияют Предложения GROUP BY, HAVING или DISTINCT. ТОП нигде не используется select_statement вида вместе с предложением WITH CHECK OPTION.

2 голосов
/ 01 мая 2009

Третий вариант - создать триггер INSTEAD OF, в котором вы пишете код для разделения обновленных значений на два разных запроса.

1 голос
/ 01 мая 2009

Хотя @ tvanfosson's ответ является абсолютно правильным, если вы используете LINQ-to-SQL, вы можете вместо этого ссылаться на обе таблицы непосредственно в своем коде, получать свою коллекцию объектов, обновлять их и возвращать их обратно. После выполнения команды обновления я понимаю, что LINQ-to-SQL поместит все команды в транзакцию и обработает ее для вас.

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