儲存相關資料

儲存隔離的實體之外,您也可以利用模型中所定義的關聯性。

提示

您可以檢視本文中的 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。

若要了解如何設定關聯性的必要性,請參閱必要和選擇性關聯性

如需有關串聯刪除行為如何運作、如何明確設定這些行為及如何依慣例選取這些行為的更多詳細資料,請參閱串聯刪除

在下列範例中,在 BlogPost 之間的關聯性上已設定串聯刪除,因此會從資料庫中刪除 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();
}