Wiem, że istniejące / starsze pytania dotyczące różnicy między Add i metodami klasy DbSet<TEntity>. Być jasnym, nie pytam o to pytanie. Wiem, jak działają i różnicę funkcjonalną między nimi.

To, co rozumiem z tego, co robią za sceną (jak opisano w swoich dokumentacjach) jest, Attach Całkowicie obejmuje funkcjonalność Add "s (proszę poprawić mnie, jeśli się mylę). Jeszcze lepiej, robi to w bardziej starannym sposobu (w rozłącznym wykresie, oznacza podmiot jako Unchanged zamiast Added, jeśli ma ustawienie wartości PK).

To sprawia, że zastanawiam się nad powodem istnienia metody {x0}}. Używam głównie rdzenia EF z odłączonymi podmiotami, a mogą być scenariusze, o których nie jestem świadomy.

Więc co może być możliwym scenariuszem, w którym mógłbym użyć metody Add, ponieważ metoda Attach nie byłaby właściwa?

2
atiyar 15 październik 2020, 02:36

1 odpowiedź

Najlepsza odpowiedź

Widzę dwa powody:

  1. Wykonać samozadowolenie kodu. Jeśli utworzysz nowy obiekt Entity, Add to, nie Attach to. Nie wszyscy deweloperzy zrozumieją, że dołączenie jednostki może oznaczać ją jako Added.

  2. Egzekwować, że jednostka jest oznaczona do wkładki. Na przykład, gdy "klonowanie" istniejącego podmiotu (tj. Zapisz go jako nowy rekord bazy danych). EF oznaczy istniejący podmiot jako Added niezależnie od jego wartości kluczowej i włóż ją jako nowy wiersz w bazie danych.

Podobnie jak w przypadku drugiego punktu, gdy klucz podstawowy jest automatycznie generowany, w EF6, to wszystko było dla niego, EF włączy jednostkę i otrzyma nową wartość kluczową z bazy danych. Rdzeń EF spróbuje wstawić nową jednostkę z istniejącymi wartościami kluczowymi, więc najpierw musisz je usunąć, tj. Ustaw je do ich wartości domyślnych.

W skrócie: Użyj Add, aby uzyskać kod, który ma na celu dodanie danych, Attach podczas mocowania obiektów, które mogą być dowolną mieszanką nowych lub istniejących podmiotów.

0
Gert Arnold 17 październik 2020, 21:29