Speichern relevanter DatenSaving Related Data

Zusätzlich zu isolierten Entitäten können Sie auch die Beziehungen verwenden, die in Ihrem Modell definiert sind.In addition to isolated entities, you can also make use of the relationships defined in your model.

Tipp

Das in diesem Artikel verwendete Beispiel finden Sie auf GitHub.You can view this article's sample on GitHub.

Hinzufügen eines Diagramms neuer EntitätenAdding a graph of new entities

Wenn Sie mehrere neue verknüpfte Entitäten erstellen, und Sie eine dem Kontext hinzufügen, werden die anderen ebenfalls hinzugefügt.If you create several new related entities, adding one of them to the context will cause the others to be added too.

Im folgenden Beispiel werden der Blog und drei relevante Beiträge in die Datenbank eingefügt.In the following example, the blog and three related posts are all inserted into the database. Die Beiträge werden gefunden und hinzugefügt, da sie über die Navigationseigenschaft Blog.Posts erreichbar sind.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();
}

Tipp

Verwenden Sie die Eigenschaft EntityEntry.State, um den Zustand einer einzelnen Entität festzulegen.Use the EntityEntry.State property to set the state of just a single entity. Beispielsweise context.Entry(blog).State = EntityState.Modified.For example, context.Entry(blog).State = EntityState.Modified.

Wenn Sie auf eine neue Entität aus der Navigationseigenschaft einer Entität verweisen, die bereits über den Kontext nachverfolgt wird, wird die Entität erkannt und in die Datenbank eingefügt.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.

Im folgenden Beispiel wird die Entität post eingefügt, da sie der Posts-Eigenschaft der blog-Entität hinzugefügt wird, die aus der Datenbank abgerufen wurde.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();
}

Ändern von BeziehungenChanging relationships

Wenn Sie die Navigationseigenschaft einer Entität ändern, werden die entsprechenden Änderungen an der Fremdschlüsselspalte in der Datenbank vorgenommen.If you change the navigation property of an entity, the corresponding changes will be made to the foreign key column in the database.

Im folgenden Beispiel wird die Entität post aktualisiert, sodass sie zur neuen blog-Entität gehört, da ihre Blog-Navigationseigenschaft so festgelegt ist, dass sie auf blog zeigt.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. Beachten Sie, dass blog ebenfalls in die Datenbank eingefügt wird, da es eine neue Entität ist, die von der Navigationseigenschaft einer Entität referenziert wird, die bereits über den Kontext (post) nachverfolgt wird.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();
}

Entfernen von BeziehungenRemoving relationships

Sie können eine Beziehung entfernen, indem Sie eine Verweisnavigation auf null festlegen oder die verknüpfte Entität aus einer Auflistungsnavigation entfernen.You can remove a relationship by setting a reference navigation to null, or removing the related entity from a collection navigation.

Das Entfernen einer Beziehung kann Nebeneffekte gemäß dem in der Beziehung konfigurierten Verhalten des kaskadierenden Deletes für die abhängige Entität haben.Removing a relationship can have side effects on the dependent entity, according to the cascade delete behavior configured in the relationship.

Das Verhalten eines kaskadierenden Deletes wird standardmäßig für erforderliche Beziehungen konfiguriert, und die untergeordnete bzw. abhängige Entität wird aus der Datenbank gelöscht.By default, for required relationships, a cascade delete behavior is configured and the child/dependent entity will be deleted from the database. Das kaskadierende Delete wird für optionale Beziehungen nicht standardmäßig konfiguriert, aber die Fremdschlüsseleigenschaft wird auf NULL festgelegt.For optional relationships, cascade delete is not configured by default, but the foreign key property will be set to null.

Informationen darüber, wie die Erforderlichkeit von Beziehungen konfiguriert wird, finden Sie unter Required and Optional Relationships (Erforderliche und optionale Beziehungen).See Required and Optional Relationships to learn about how the requiredness of relationships can be configured.

Ausführliche Informationen zur Funktionsweise des kaskadierenden Deletes, wie es explizit konfiguriert werden kann und wie es gemäß der Konvention ausgewählt wird, finden Sie unter Cascade Delete (Kaskadierendes Delete).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.

Im folgenden Beispiel wird das kaskadierende Delete der Beziehung zwischen Blog und Post konfiguriert, sodass die Entität post aus der Datenbank gelöscht wird.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();
}