Podstawowe zmiany zapisu
DbContext.SaveChanges() jest jedną z dwóch technik zapisywania zmian w bazie danych za pomocą programu EF. Ta metoda umożliwia wykonanie co najmniej jednej śledzonej zmiany (dodawanie, aktualizowanie, usuwanie), a następnie stosowanie tych zmian przez wywołanie SaveChanges
metody . Alternatywnie ExecuteUpdate i ExecuteDelete można jej używać bez angażowania monitora zmian. Aby zapoznać się z wprowadzeniem do porównania tych dwóch technik, zobacz stronę Przegląd na temat zapisywania danych.
Napiwek
Przykład z tego artykułu można zobaczyć w witrynie GitHub.
Dodawanie danych
DbSet<TEntity>.Add Użyj metody , aby dodać nowe wystąpienia klas jednostek. Dane zostaną wstawione do bazy danych po wywołaniu metody DbContext.SaveChanges():
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
context.SaveChanges();
}
Napiwek
Metody Add
, Attach
i Update
działają na pełnym grafie jednostek przekazanych do nich, zgodnie z opisem w sekcji Powiązane dane . Alternatywnie właściwość EntityEntry.State może służyć do ustawiania stanu tylko jednej jednostki. Na przykład context.Entry(blog).State = EntityState.Modified
.
Aktualizowanie danych
Program EF automatycznie wykrywa zmiany wprowadzone w istniejącej jednostce śledzonej przez kontekst. Obejmuje to jednostki ładowane/kwerendy z bazy danych oraz jednostki, które zostały wcześniej dodane i zapisane w bazie danych.
Po prostu zmodyfikuj wartości przypisane do właściwości, a następnie wywołaj metodę SaveChanges
:
using (var context = new BloggingContext())
{
var blog = context.Blogs.Single(b => b.Url == "http://example.com");
blog.Url = "http://example.com/blog";
context.SaveChanges();
}
Usuwanie danych
DbSet<TEntity>.Remove Użyj metody , aby usunąć wystąpienia klas jednostek:
using (var context = new BloggingContext())
{
var blog = context.Blogs.Single(b => b.Url == "http://example.com/blog");
context.Blogs.Remove(blog);
context.SaveChanges();
}
Jeśli jednostka już istnieje w bazie danych, zostanie usunięta podczas SaveChanges
operacji . Jeśli jednostka nie została jeszcze zapisana w bazie danych (tj. jest śledzona w miarę dodawania), zostanie usunięta z kontekstu i nie zostanie już wstawiona po SaveChanges
wywołaniu.
Wiele operacji w jednym elemencie SaveChanges
Wiele operacji dodawania/aktualizowania/usuwania można połączyć w jedno wywołanie metody SaveChanges
:
using (var context = new BloggingContext())
{
// seeding database
context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
context.SaveChanges();
}
using (var context = new BloggingContext())
{
// add
context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });
// update
var firstBlog = context.Blogs.First();
firstBlog.Url = "";
// remove
var lastBlog = context.Blogs.OrderBy(e => e.BlogId).Last();
context.Blogs.Remove(lastBlog);
context.SaveChanges();
}
Uwaga
W przypadku większości dostawców SaveChanges
baz danych transakcja jest transakcyjna. Oznacza to, że wszystkie operacje kończą się powodzeniem lub niepowodzeniem, a operacje nigdy nie zostaną częściowo zastosowane.