Мне нужна помощь в повторной факторизации этого старого кода LINQ-SQL, который генерирует около 100 операторов обновления.LINQ-SQL Обновление нескольких строк в одной транзакции
Я продолжу играть с лучшим решением, но буду благодарен за некоторые идеи/прошлый опыт в этой проблеме.
Вот мой код:
List<Foo> foos;
int userId = 123;
using (DataClassesDataContext db = new FooDatabase())
{
foos = (from f in db.FooBars
where f.UserId = userId
select f).ToList();
foreach (FooBar fooBar in foos)
{
fooBar.IsFoo = false;
}
db.SubmitChanges()
}
По существу я хочу обновить IsFoo
поле к ложным для всех записей, которые имеют особое значение UserId
.
Что происходит это .ToList()
является стреляя запрос, чтобы получить все FooBars
для конкретного пользователя, то для каждого объекта Foo, его выполнение в UPDATE
о обновляя IsFoo
собственности.
Может ли вышеуказанный код быть переупознано с одним заявлением UPDATE
?
В идеале, только SQL я хочу уволил это ниже:
UPDATE FooBars
SET IsFoo = FALSE
WHERE UserId = 123
EDIT
Ok так похоже, что не могу быть сделано без использования db.ExecuteCommand.
Grr ...!
Что я, вероятно, в конечном итоге сделаю, это создание другого метода расширения для пространства имен DLINQ
. Все еще требуется некоторая жесткая кодировка (например, запись «WHERE» и «UPDATE»), но по крайней мере она скрывает большинство деталей реализации от фактического синтаксиса запроса LINQ.
Я не думаю, что вы можете сделать это в одной транзакции. – VoodooChild