Udostępnij za pośrednictwem


Zapisywanie powiązanych danych

Oprócz izolowanych jednostek można również korzystać z relacji zdefiniowanych w modelu.

Napiwek

Przykład z tego artykułu można zobaczyć w witrynie GitHub.

Dodawanie grafu nowych jednostek

Jeśli utworzysz kilka nowych powiązanych jednostek, dodanie jednej z nich do kontekstu spowoduje również dodanie innych jednostek.

W poniższym przykładzie blog i trzy powiązane wpisy są wstawione do bazy danych. Wpisy są znajdowane i dodawane, ponieważ są dostępne za pośrednictwem Blog.Posts właściwości nawigacji.

using (var context = new BloggingContext())
{
    var blog = new Blog
    {
        Url = "http://blogs.msdn.com/dotnet",
        Posts = new List<Post>
        {
            new Post { Title = "Intro to C#" },
            new Post { Title = "Intro to VB.NET" },
            new Post { Title = "Intro to F#" }
        }
    };

    context.Blogs.Add(blog);
    context.SaveChanges();
}

Napiwek

Użyj właściwości EntityEntry.State, aby ustawić stan tylko jednej jednostki. Na przykład context.Entry(blog).State = EntityState.Modified.

Jeśli odwołujesz się do nowej jednostki z właściwości nawigacji jednostki, która jest już śledzona przez kontekst, jednostka zostanie odnaleziona i wstawiona do bazy danych.

W poniższym przykładzie jednostka post jest wstawiana, ponieważ jest dodawana do Posts właściwości blog jednostki, która została pobrana z bazy danych.

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Include(b => b.Posts).First();
    var post = new Post { Title = "Intro to EF Core" };

    blog.Posts.Add(post);
    context.SaveChanges();
}

Zmienianie relacji

Jeśli zmienisz właściwość nawigacji jednostki, odpowiednie zmiany zostaną wprowadzone w kolumnie klucza obcego w bazie danych.

W poniższym przykładzie jednostka jest aktualizowana tak, aby należała do nowej jednostki, post ponieważ jej Blog właściwość nawigacji jest ustawiona na blogblog wartość . Należy również pamiętać, że zostanie wstawiony do bazy danych, blog ponieważ jest to nowa jednostka, do którego odwołuje się właściwość nawigacji jednostki, która jest już śledzona przez kontekst (post).

using (var context = new BloggingContext())
{
    var blog = new Blog { Url = "http://blogs.msdn.com/visualstudio" };
    var post = context.Posts.First();

    post.Blog = blog;
    context.SaveChanges();
}

Usuwanie relacji

Relację można usunąć, ustawiając nawigację referencyjną na null, lub usuwając powiązaną jednostkę z nawigacji kolekcji.

Usunięcie relacji może mieć skutki uboczne dla jednostki zależnej, zgodnie z zachowaniem usuwania kaskadowego skonfigurowanego w relacji.

Domyślnie w przypadku wymaganych relacji jest skonfigurowane zachowanie usuwania kaskadowego, a jednostka podrzędna/zależna zostanie usunięta z bazy danych. W przypadku relacji opcjonalnych usuwanie kaskadowe nie jest domyślnie skonfigurowane, ale właściwość klucza obcego zostanie ustawiona na wartość null.

Zobacz Wymagane i Opcjonalne relacje , aby dowiedzieć się, jak można skonfigurować wymaganość relacji.

Zobacz Usuwanie kaskadowe, aby uzyskać więcej informacji na temat sposobu działania usuwania kaskadowego, sposobu ich jawnego konfigurowania i sposobu ich wybierania zgodnie z konwencją.

W poniższym przykładzie kaskadowe usuwanie jest konfigurowane w relacji między Blog i Post, więc post jednostka jest usuwana z bazy danych.

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Include(b => b.Posts).First();
    var post = blog.Posts.First();

    blog.Posts.Remove(post);
    context.SaveChanges();
}