Speichern relevanter Daten

Zusätzlich zu isolierten Entitäten können Sie auch die Beziehungen verwenden, die in Ihrem Modell definiert sind.

Tipp

Das in diesem Artikel verwendete Beispiel finden Sie auf GitHub.

Hinzufügen eines Diagramms neuer Entitäten

Wenn Sie mehrere neue verknüpfte Entitäten erstellen, und Sie eine dem Kontext hinzufügen, werden die anderen ebenfalls hinzugefügt.

Im folgenden Beispiel werden der Blog und drei relevante Beiträge in die Datenbank eingefügt. Die Beiträge werden gefunden und hinzugefügt, da sie über die Navigationseigenschaft Blog.Posts erreichbar sind.

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. Beispiel: 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.

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.

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 Beziehungen

Wenn Sie die Navigationseigenschaft einer Entität ändern, werden die entsprechenden Änderungen an der Fremdschlüsselspalte in der Datenbank vorgenommen.

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. 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.

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 Beziehungen

Sie können eine Beziehung entfernen, indem Sie eine Verweisnavigation auf null festlegen oder die verknüpfte Entität aus einer Auflistungsnavigation entfernen.

Das Entfernen einer Beziehung kann Nebeneffekte gemäß dem in der Beziehung konfigurierten Verhalten des kaskadierenden Deletes für die abhängige Entität haben.

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. Das kaskadierende Delete wird für optionale Beziehungen nicht standardmäßig konfiguriert, aber die Fremdschlüsseleigenschaft wird auf NULL festgelegt.

Informationen darüber, wie die Erforderlichkeit von Beziehungen konfiguriert wird, finden Sie unter Required and Optional Relationships (Erforderliche und optionale Beziehungen).

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 Kaskadierendes Delete.

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.

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