Udostępnij za pośrednictwem


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, Attachi 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 SaveChangesoperacji . 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.