Pracuję nad aplikacją sieci Web C# ASP.NET MVC 5 z EF 5. Mapowanie moich tabel bazy danych za pomocą EF generuje klasę DbContext
i plik .edmx
. Dzisiaj czytałem a great article about creating generic DAL classes, ale zatrzymał się na następnym zdaniu:Mylące artykuły i dokumentacja o różnicach (jeśli występują) między System.Data.EntityState.Add i DbSet.Add
Należy pamiętać, że stosując metodę wprowadzania do zmiany stanu podmiotu będzie wpływa tylko rzeczywisty podmiot, które przechodzą w metody. Nie będzie ona kolidować z wykresem i ustawiać stanu wszystkich powiązanych obiektów, w przeciwieństwie do metody DbSet.Add.
To zaprzecza temu, co jest wymienione w tych pytaniach:
- http://forums.asp.net/p/2015170/5803192.aspx
- http://forums.asp.net/p/2060606/5943259.aspx
- Difference between DbSet.Add(entity) and entity.State = EntityState.Added
- What is the difference between IDbSet.Add and DbEntityEntry.State = EntityState.Added?
W odpowiedzi na wszystkie powyższe pytania wszyscy użytkownicy wspomnieli, że używanie System.Data.EntityState.Added
jest dokładnie takie samo jak przy użyciu DbSet.Add
. Ale pierwszy artykuł, o którym wspomniałem, mówi, że używanie System.Data.EntityState.Added
nie będzie kaskadować wykresu.
Na podstawie mojego testu stwierdzam, że użycie System.Data.EntityState.Added
spowoduje kaskadę wykresu, tak jak w przypadku DBset.Add
. Czy artykuł jest błędny, czy jest to mój test i Q & A?
więc mówisz, że za pomocą EntityState.Added i przy użyciu DBset.Add są dokładnie takie same? –
Tak, jeśli twoja encja nie jest śledzona przez kontekst, obie metody będą robić dokładnie to samo, z dokładnie takim samym wynikiem, co jest potwierdzone przez przykład testowy i eksplorację kodu źródłowego. – Evk
więc powiedzmy, że obiekt jest śledzony przez kontekst, to czy będą się różnić? jak powiedziałeś "jeśli twoja jednostka nie jest śledzona ..." –