Potrzebuję pomocy w re-factoring tego starszego kodu LINQ-SQL, który generuje około 100 instrukcji aktualizacji.LINQ-SQL Aktualizowanie wielu wierszy w pojedynczej transakcji
Będę grał dalej z najlepszym rozwiązaniem, ale doceniłbym pewne pomysły/wcześniejsze doświadczenia z tym problemem.
Oto mój kod:
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()
}
Zasadniczo chcę zaktualizować pole false IsFoo
dla wszystkich rekordów, które mają szczególną wartość UserId
.
Co się dzieje jest .ToList()
jest wystrzelenie kwerendy, aby uzyskać wszystkie FooBars
dla konkretnego użytkownika, a następnie dla każdego obiektu Foo, jego wykonanie jest UPDATE
komunikatu aktualizującego właściwość IsFoo
.
Czy powyższy kod można ponownie uwzględnić w jednym pojedynczym oświadczeniu UPDATE
?
Idealnie, tylko SQL chcę zwolniony jest poniżej:
UPDATE FooBars
SET IsFoo = FALSE
WHERE UserId = 123
EDIT
Ok, więc wygląda na to mogę to zrobić bez użycia db.ExecuteCommand.
Grr ...!
Prawdopodobnie powstanie nowa metoda rozszerzenia dla przestrzeni nazw DLINQ
. Nadal wymaga trochę hardcoding (np. Pisząc "WHERE" i "UPDATE"), ale przynajmniej ukrywa większość szczegółów implementacji z dala od rzeczywistej składni zapytania LINQ.
Nie sądzę, można to zrobić w ramach jednej transakcji. – VoodooChild