-
Notifications
You must be signed in to change notification settings - Fork 0
ChangeEntityState
Marcin Sulecki edited this page Mar 28, 2017
·
2 revisions
using (var context = new MusicStoreContext())
{
context.Albums.Attach(album);
context.Entry<Album>(album).State = EntityState.Modified;
context.SaveChanges();
}
Porada: warto stosować w przypadku usług sieciowych
W przypadku EF 6.x wywołanie metody DbSet.Add() powoduje wyszukiwanie wszystkich referencji encji w Navigation Property. Jeśli jakieś encje zostaną znalezione i nie są jeszcze śledzone przez Context również są oznaczone jako added.
DbSet.Attach() ma to samo działanie za wyjątkiem takim, że wszystkie encje oznaczone są jako unchaged.
PM> Install-Package RefactorThis.GraphDiff
private static void GraphDiffTest()
{
Artist artist = new Artist { ArtistId = 1, FirstName = "The Artist Formerly Known as Prince" };
using (var context = new MusicStoreContext())
{
context.UpdateGraph<Artist>(artist, map => map
.OwnedCollection(p => p.Albums));
context.SaveChanges();
}
}
W EF Core to zostało zmienione.
- główna encja (root) jest zawsze w żądanym stanie (added dla DbSet.Add i uchanged dla DbSet.Attach)
- dla encji, które zostaną odnalezione podczas rekursywnego przeszukiwania
w navigation property stosowanie jest następująca reguła:
- jeśli primary key jest generowany przez bazę danych
Na podst. https://docs.microsoft.com/en-us/ef/efcore-and-ef6/porting/ensure-requirements