J'ai besoin d'aide pour recréer ce code LINQ-SQL hérité qui génère environ 100 instructions de mise à jour.LINQ-SQL Mise à jour de plusieurs lignes dans une seule transaction
Je vais continuer à jouer avec la meilleure solution, mais j'apprécierais quelques idées/expériences passées avec ce problème.
Voici mon code:
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()
}
Essentiellement, je veux mettre à jour le champ IsFoo
à false pour tous les enregistrements qui ont une valeur UserId
particulière.
Ce qui est passe est le .ToList()
est tir hors une requête pour obtenir toutes les FooBars
pour un utilisateur particulier, puis pour chaque objet Foo, son exécution d'une instruction UPDATE
mise à jour la propriété IsFoo
.
Est-il possible de recréer le code ci-dessus en une seule instruction UPDATE
?
Idéalement, le seul SQL que je veux le feu est ci-dessous:
UPDATE FooBars
SET IsFoo = FALSE
WHERE UserId = 123
EDIT
Ok ressemble tellement qu'il ne peut pas être fait sans utiliser db.ExecuteCommand.
Grr ...!
Ce que je vais probablement faire est de créer une autre méthode d'extension pour l'espace de noms DLINQ
. Encore besoin de codage en dur (c'est-à-dire écrire "WHERE" et "UPDATE"), mais au moins il cache la plupart des détails de l'implémentation loin de la syntaxe réelle de la requête LINQ.
Je ne pense pas que vous pouvez faire cela en une seule transaction. – VoodooChild