Zapisywanie powiązanych danychSaving Related Data

Oprócz izolowanych jednostek można wprowadzić korzystanie z relacji zdefiniowanych w modelu.In addition to isolated entities, you can also make use of the relationships defined in your model.

Porada

Przykład użyty w tym artykule można zobaczyć w witrynie GitHub.You can view this article's sample on GitHub.

Dodawanie wykresu nowych jednostekAdding a graph of new entities

Jeśli utworzysz kilka nowych jednostek powiązanych, dodając jeden z nich do kontekstu spowoduje, że inne osoby mają zostać dodane za.If you create several new related entities, adding one of them to the context will cause the others to be added too.

W poniższym przykładzie blogu i trzy powiązane wpisy są wszystkie wstawione do bazy danych.In the following example, the blog and three related posts are all inserted into the database. Znalezione wpisy i dodawane, ponieważ są one dostępne za pośrednictwem Blog.Posts właściwości nawigacji.The posts are found and added, because they are reachable via the Blog.Posts navigation property.

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();
}

Porada

Właściwość EntityEntry.State służy do ustawiania stanu pojedynczej jednostki.Use the EntityEntry.State property to set the state of just a single entity. Na przykład context.Entry(blog).State = EntityState.Modified.For example, context.Entry(blog).State = EntityState.Modified.

Jeśli odwołujesz Nowa jednostka z właściwości nawigacji jednostki, która jest już śledzony przez kontekst jednostki będą wykrywane i wstawione do bazy danych.If you reference a new entity from the navigation property of an entity that is already tracked by the context, the entity will be discovered and inserted into the database.

W poniższym przykładzie post dodaje się jednostki, ponieważ jest ona dodawana do Posts właściwość blog jednostki, która została pobrana z bazy danych.In the following example, the post entity is inserted because it is added to the Posts property of the blog entity which was fetched from the database.

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();
}

Zmiana relacjiChanging relationships

Jeśli zmienisz właściwości nawigacji jednostki, odpowiednie zmiany będą kolumna klucza obcego w bazie danych.If you change the navigation property of an entity, the corresponding changes will be made to the foreign key column in the database.

W poniższym przykładzie post jednostki zostanie zaktualizowany i będzie należeć do nowego blog jednostki ponieważ jej Blog właściwość nawigacji jest ustawiona, aby wskazywał blog.In the following example, the post entity is updated to belong to the new blog entity because its Blog navigation property is set to point to blog. Należy pamiętać, że blog również zostaną wstawione do bazy danych, ponieważ jest nowa jednostka, która odwołuje się do właściwości nawigacji jednostki, która jest już śledzona przez kontekst (post).Note that blog will also be inserted into the database because it is a new entity that is referenced by the navigation property of an entity that is already tracked by the context (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 relacjiRemoving relationships

Możesz usunąć relację, ustawiając nawigacji odwołanie null, lub usuwanie obiektu pokrewnego nawigacji kolekcji.You can remove a relationship by setting a reference navigation to null, or removing the related entity from a collection navigation.

Usunięcie relacji może mieć skutki uboczne jednostki zależne, zgodnie z każdym skonfigurowane w relacji zachowanie przy usuwaniu.Removing a relationship can have side effects on the dependent entity, according to the cascade delete behavior configured in the relationship.

Domyślnie dla wymaganych relacji skonfigurowano zachowanie dotyczące usuwania cascade, a jednostki podrzędne/zależnych od ustawień lokalnych, które zostaną usunięte z bazy danych.By default, for required relationships, a cascade delete behavior is configured and the child/dependent entity will be deleted from the database. W przypadku relacji opcjonalne usuwanie kaskadowe nie skonfigurowano domyślnie, ale zostanie ustawiona właściwość klucza obcego na wartość null.For optional relationships, cascade delete is not configured by default, but the foreign key property will be set to null.

Zobacz relacje wymaganych i opcjonalnych Aby dowiedzieć się, jak można skonfigurować requiredness relacji.See Required and Optional Relationships to learn about how the requiredness of relationships can be configured.

Zobacz usuwanie kaskadowe szczegółowe informacje na temat sposobu usuwanie kaskadowe zachowania działa jak może być jawnie skonfigurowane i jak są wybrane przez Konwencję.See Cascade Delete for more details on how cascade delete behaviors work, how they can be configured explicitly and how they are selected by convention.

W poniższym przykładzie skonfigurowano usuwanie kaskadowe relacji między Blog i Post, więc post została usunięta z bazy danych.In the following example, a cascade delete is configured on the relationship between Blog and Post, so the post entity is deleted from the database.

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();
}