儲存相關資料
儲存隔離的實體之外,您也可以利用模型中所定義的關聯性。
提示
您可以檢視本文中的 GitHut 範例。
新增新實體的圖表
如果您建立數個新的相關實體,則將其中一個實體新增至內容中時,也會一併新增其他實體。
在下列範例中,會將部落格及三篇相關文章都插入到資料庫中。 系統會找出並新增文章,因為可以透過 Blog.Posts
導覽屬性觸達這些文章。
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();
}
提示
請使用 EntityEntry.State 屬性來僅設定單一實體的狀態。 例如: context.Entry(blog).State = EntityState.Modified
。
新增相關實體
如果您從內容所追蹤實體的導覽屬性參考新的實體,系統將會探索到該實體並插入到資料庫中。
在下列範例中,會插入 post
實體,因為該實體已新增至擷取自資料庫 blog
實體的 Posts
屬性。
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();
}
變更關聯性
如果您變更某個實體的導覽屬性,系統將會對資料庫中的外部索引鍵資料行進行對應的變更。
在下列範例中,會將 post
實體更新成屬於新的 blog
實體,因為其 Blog
導覽屬性是設定為指向 blog
。 請注意,系統也會將 blog
插入到資料庫中,因為它是內容所追蹤實體 (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();
}
移除關聯性
您可以藉由將參考導覽設定為 null
,或從集合導覽中移除相關實體,來移除關聯性。
根據關聯性中所設定的串聯刪除行為,移除關聯性可能會對相依實體產生副作用。
針對必要關聯性,預設會設定串聯刪除行為,系統將會從資料庫中刪除子系/相依實體。 針對選擇性關聯性,預設並不會設定串聯刪除,但外部索引鍵屬性將會設定為 Null。
若要了解如何設定關聯性的必要性,請參閱必要和選擇性關聯性。
如需有關串聯刪除行為如何運作、如何明確設定這些行為及如何依慣例選取這些行為的更多詳細資料,請參閱串聯刪除。
在下列範例中,在 Blog
與 Post
之間的關聯性上已設定串聯刪除,因此會從資料庫中刪除 post
實體。
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();
}