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
.
Hinzufügen einer verknüpften Entität
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();
}