基本の保存

コンテキストとエンティティ クラスを使用してデータを追加、変更、および削除する方法を説明します。

ヒント

この記事のサンプルは GitHub で確認できます。

データの追加

エンティティ クラスの新しいインスタンスを追加するには、DbSet.Add メソッドを使用します。 データは、SaveChanges が呼び出されたときにデータベースに挿入されます。

using (var context = new BloggingContext())
{
    var blog = new Blog { Url = "http://example.com" };
    context.Blogs.Add(blog);
    context.SaveChanges();
}

ヒント

Add、Attach、および Update メソッドは、そのすべてが「関連データ」で説明するように、すべてのエンティティで動作します。 EntityEntry.State プロパティを使用して、単一のエンティティの状態を設定できます。 たとえば、「 context.Entry(blog).State = EntityState.Modified 」のように入力します。

データの更新

EF は、コンテキストによって追跡されている既存のエンティティに対して行われた変更を自動的に検出します。 これには、データベースから読み込む/クエリするエンティティと、既に追加され、データベースに保存されているエンティティが含まれます。

プロパティに割り当てられる値を変更した後、SaveChanges を呼び出すだけです。

using (var context = new BloggingContext())
{
    var blog = context.Blogs.First();
    blog.Url = "http://example.com/blog";
    context.SaveChanges();
}

データの削除

エンティティ クラスのインスタンスを削除するには、DbSet.Remove メソッドを使用します。

エンティティが既にデータベースに存在する場合は、SaveChanges の処理中に削除されます。 エンティティがまだデータベースに保存されていない (追加時に追跡される) 場合は、コンテキストから削除され、SaveChanges が呼び出されたときにエンティティが挿入されることはなくなります。

using (var context = new BloggingContext())
{
    var blog = context.Blogs.First();
    context.Blogs.Remove(blog);
    context.SaveChanges();
}

1 つの SaveChanges 内の複数の操作

複数の追加/更新/削除操作を組み合わせて、SaveChanges の 1 回の呼び出しで使用できます。

注意

ほとんどのデータベース プロバイダーでは、SaveChanges はトランザクションです。 これは、すべての操作が成功するか失敗するかのいずれかであり、操作の一部のみが適用されることはないことを意味します。

using (var context = new BloggingContext())
{
    // seeding database
    context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
    context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
    context.SaveChanges();
}

using (var context = new BloggingContext())
{
    // add
    context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
    context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });

    // update
    var firstBlog = context.Blogs.First();
    firstBlog.Url = "";

    // remove
    var lastBlog = context.Blogs.OrderBy(e => e.BlogId).Last();
    context.Blogs.Remove(lastBlog);

    context.SaveChanges();
}