2012-02-12 17 views
8

DbSet.Add() dodaje pojedynczą jednostkę do DbSet. Ale nie ma DbSet.AddRange(), aby dodać listę podmiotów. Czy istnieje metoda, którą mogę wywołać bezpośrednio z EF, która pozwala mi dodać listę jednostek? Jeśli nie, czy istnieje jakiś powód, dla którego EF nie zapewnia takiej metody?Jak dodać listę podmiotów do DbSet

+0

Możesz napisać prostą metodę rozszerzenia, aby to osiągnąć. – Eranga

+0

Nad tym właśnie pracuję. Zaskoczyło mnie to, dlaczego EF tego nie zapewnia? – hshen

+2

Jest to po prostu narzędzie, które każdy może napisać. Istnieje wiele klas kolekcji, które nie mają metody "AddRange". Zapewnienie prostego interfejsu API z podstawową funkcjonalnością jest lepsze niż zaśmiecony interfejs. – Eranga

Odpowiedz

6

Komentarz Erangi jest prawdopodobnie prawdziwy. Domyślam się, co należy zrobić, jeśli dowolny element na liście ma ustawioną właściwość klucza, jeśli kluczem dla tabeli podstawowej jest kolumna tożsamości:

  • Zgłaszanie wyjątków? LUB
  • ustawić klucz na zero, aby wstawić nowy obiekt z innym kluczem? LUB
  • zaktualizować encję za pomocą tego samego klucza?

Z tego powodu nie ma większego sensu implementacja funkcji AddRange() do ogólnej klasy DbSet. Jeśli chcesz coś konkretnego sylwetkę swoje potrzeby, można przedłużyć DbSet następująco

public static class EFExtension 
    { 

     public static void AddRange<TEntity>(this DbSet<TEntity> dbSet, IList<TEntity> entities) where TEntity : class 
     { 
     foreach (TEntity e in entities) 
     { 
      dbSet.Add(e); 
     } 
    } 
    } 
11

W EF6 zarówno DbSet.AddRange i DbSet.RemoveRange są dostępne.

Powodem ich zastosowania jest poprawienie wydajności, co można zrobić, wyłączając DetectChanges dla każdego dodania lub usunięcia jednostki.

Więcej szczegółów:

UWAGA: Nie ma jeszcze oficjalnej dokumentacji dla tej metody, jak EF jest jeszcze RC1.

AKTUALIZACJA: EF6 został wydany, i the official documentation for .AddRange() is here, ale wyjaśnienie, co dzieje się wewnątrz niego w linkach powyżej.

Powiązane problemy