Aktualizacja kolekcji poprzez Entity Framework

Aktualizacja kolekcji poprzez Entity Framework
SH
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 24
0

Witam,

Czy da się jakoś w łatwy sposób dokonać aktualizacji wybranych elementów(kolekcji) poprzez EF? Tzn.

Kopiuj
using (var repo = new EFDbContext())
{
    var test = repo.PlanTasksDb.Where(x => taskWithComments.Any(e => e.Task.id == x.id));

    foreach (var planTaskDb in test)
    {
        planTaskDb.EmailSend = true;
    }

                            
    repo.SaveChanges();
}

Czy jednak tak się nie da i trzeba każdą encję osobno wybrać z bazy i zaktualizować ?

mariano901229
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 597
0

W Twoim kodzie przecież z punktu widzenia serwera baz danych mamy jedną transakcję zawierającą (zależnie od ilości elementów w kolekcji test) ileś tam operacji UPDATE. Dopiero metoda SaveChanges() wykonuje transakcję. Jakbyś miał w pętli SaveChanges(), wówczas każdy UPDATE szedłby osobno.

mariano901229
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 597
1

To nie ma nic wspólnego z aktualizacją. To błędy w wyrażeniu LINQ. Popraw:

Kopiuj
repo.PlanTasksDb.Where(x => taskWithComments.Any(e => e.Task.id == x.id));

na:

Kopiuj
repo.PlanTasksDb.Where(x => x.taskWithComments.Select(e => e.Task.id).Contains(x.id));
SH
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 24
0

Nie wiem czemu ale działa tylko takie coś:
var ids = taskWithComments.Select(x => x.Task.id);
var tasksToUpdate = repo.PlanTasksDb.Where(x => ids.Any(e => e == x.id));

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.