関連するデータの保存Saving Related Data

分離のエンティティだけでなく行うことも、モデルで定義されているリレーションシップを使用します。In addition to isolated entities, you can also make use of the relationships defined in your model.

ヒント

この記事を表示するサンプルGitHub でします。You can view this article's sample on GitHub.

新しいエンティティのグラフを追加します。Adding a graph of new entities

いくつかの新しい関連エンティティを作成する場合、コンテキストへのうちの 1 つの追加により、他のユーザーを追加するされます。If you create several new related entities, adding one of them to the context will cause the others to be added too.

次の例では、ブログと 3 つの関連する投稿はすべて、データベースに挿入します。In the following example, the blog and three related posts are all inserted into the database. 投稿が検出され、追加、経由で到達可能であるため、Blog.Postsナビゲーション プロパティ。The posts are found and added, because they are reachable via the Blog.Posts navigation property.

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

コンテキストによって既に追跡されているエンティティのナビゲーション プロパティから、新しいエンティティを参照する場合、エンティティが検出され、データベースに挿入します。If you reference a new entity from the navigation property of an entity that is already tracked by the context, the entity will be discovered and inserted into the database.

次の例で、postに追加されるため、エンティティが挿入された、Postsのプロパティ、blogデータベースからフェッチされているエンティティ。In the following example, the post entity is inserted because it is added to the Posts property of the blog entity which was fetched from the database.

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

リレーションシップを変更します。Changing relationships

エンティティのナビゲーション プロパティを変更すると、対応する変更部分は、データベースの外部キー列になります。If you change the navigation property of an entity, the corresponding changes will be made to the foreign key column in the database.

次の例で、post新しいに属しているエンティティが更新されたblogエンティティのためそのBlog をポイントするナビゲーション プロパティが設定blogです。In the following example, the post entity is updated to belong to the new blog entity because its Blog navigation property is set to point to blog. なおblogコンテキストによって既に追跡されているエンティティのナビゲーション プロパティによって参照される新しいエンティティであるために、データベースに挿入もされます (post)。Note that blog will also be inserted into the database because it is a new entity that is referenced by the navigation property of an entity that is already tracked by the context (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();
}

リレーションシップを削除します。Removing relationships

リレーションシップを削除するには参照ナビゲーションに設定してnull、またはコレクションのナビゲーションから、関連するエンティティを削除します。You can remove a relationship by setting a reference navigation to null, or removing the related entity from a collection navigation.

関係を削除すると、依存エンティティに副作用があることができます、カスケードに従ってリレーションシップで構成されている動作を削除します。Removing a relationship can have side effects on the dependent entity, according to the cascade delete behavior configured in the relationship.

既定では、必須のリレーションシップで連鎖削除の動作が構成され、子/依存エンティティは、データベースから削除されます。By default, for required relationships, a cascade delete behavior is configured and the child/dependent entity will be deleted from the database. 省略可能なリレーションシップで連鎖削除が構成されていない既定では、外部キー プロパティが設定されますを null にします。For optional relationships, cascade delete is not configured by default, but the foreign key property will be set to null.

参照してください必須および省略可能なリレーションシップに関係の requiredness を構成する方法について説明します。See Required and Optional Relationships to learn about how the requiredness of relationships can be configured.

参照してください連鎖削除それらを構成する方法に明示的に、慣例の選択方法、連鎖が動作を削除する方法の詳細についてが機能します。See Cascade Delete for more details on how cascade delete behaviors work, how they can be configured explicitly and how they are selected by convention.

次の例では、連鎖削除が構成されている間のリレーションシップにBlogPostので、postエンティティをデータベースから削除します。In the following example, a cascade delete is configured on the relationship between Blog and Post, so the post entity is deleted from the database.

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