Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zusätzlich zu isolierten Entitäten können Sie auch die in Ihrem Modell definierten Beziehungen verwenden.
Tipp
Das in diesem Artikel verwendete Beispiel finden Sie auf GitHub.
Hinzufügen eines Diagramms mit neuen Entitäten
Wenn Sie mehrere neue verwandte Entitäten erstellen, führt das Hinzufügen einer dieser Entitäten zum Kontext dazu, dass auch die anderen hinzugefügt werden.
Im folgenden Beispiel werden der Blog und drei verwandte Beiträge in die Datenbank eingefügt. Die Beiträge werden gefunden und hinzugefügt, da sie über die Blog.Posts Navigationseigenschaft 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);
await context.SaveChangesAsync();
}
Tipp
Verwenden Sie die EntityEntry.State-Eigenschaft, um den Status einer einzigen Entität festzulegen. Beispiel: context.Entry(blog).State = EntityState.Modified.
Hinzufügen einer verwandten Entität
Wenn Sie auf eine neue Entität aus der Navigationseigenschaft einer Entität verweisen, die bereits vom Kontext nachverfolgt wird, wird die Entität ermittelt und in die Datenbank eingefügt.
Im folgenden Beispiel wird die post-Entität eingefügt, da sie zur Posts-Eigenschaft der blog-Entität hinzugefügt wurde, die aus der Datenbank abgerufen wurde.
using (var context = new BloggingContext())
{
var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
var post = new Post { Title = "Intro to EF Core" };
blog.Posts.Add(post);
await context.SaveChangesAsync();
}
Ä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 post-Entität so aktualisiert, dass sie zur neuen blog-Entität gehört, da die Blog-Navigationseigenschaft auf blog verweisen festgelegt ist. Beachten Sie, dass blog auch in die Datenbank eingefügt wird, da es sich um eine neue Entität handelt, auf die von der Navigationseigenschaft einer Entität verwiesen wird, die bereits vom Kontext (post) nachverfolgt wird.
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://blogs.msdn.com/visualstudio" };
var post = await context.Posts.FirstAsync();
post.Blog = blog;
await context.SaveChangesAsync();
}
Entfernen von Beziehungen
Sie können eine Beziehung entfernen, indem Sie entweder eine Referenznavigation auf null setzen oder die zugehörige Entität aus einer Sammlungsnavigation entfernen.
Das Entfernen einer Beziehung kann Nebenwirkungen auf die abhängige Entität haben, entsprechend dem in der Beziehung konfigurierten Löschverhalten der Löschweitergabe.
Standardmäßig wird bei erforderlichen Beziehungen ein kaskadierendes Löschverhalten konfiguriert, und die untergeordnete/abhängige Entität wird aus der Datenbank gelöscht. Bei optionalen Beziehungen ist die Kaskadenlöschung standardmäßig nicht konfiguriert, jedoch wird die Fremdschlüsseleigenschaft auf null gesetzt.
Um zu erfahren, wie die Erforderlichkeit von Beziehungen konfiguriert werden kann, sehen Sie unter "Erforderliche und optionale Beziehungen".
Weitere Informationen darüber, wie das Cascade Delete-Verhalten funktioniert, wie es explizit konfiguriert werden kann und wie es durch Konventionen ausgewählt wird, finden Sie unter Cascade Delete.
Im folgenden Beispiel wird eine Löschweitergabe für die Beziehung zwischen Blog und Post konfiguriert, sodass die post-Entität aus der Datenbank gelöscht wird.
using (var context = new BloggingContext())
{
var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
var post = blog.Posts.First();
blog.Posts.Remove(post);
await context.SaveChangesAsync();
}