基本の保存Basic Save

コンテキストとエンティティ クラスを使用してデータを追加、変更、および削除する方法を説明します。Learn how to add, modify, and remove data using your context and entity classes.

ヒント

この記事のサンプルは GitHub で確認できます。You can view this article's sample on GitHub.

データの追加Adding Data

エンティティ クラスの新しいインスタンスを追加するには、DbSet.Add メソッドを使用します。Use the DbSet.Add method to add new instances of your entity classes. データは、SaveChanges が呼び出されたときにデータベースに挿入されます。The data will be inserted in the database when you call SaveChanges.

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

    Console.WriteLine(blog.BlogId + ": " +  blog.Url);
}

ヒント

Add、Attach、および Update メソッドは、そのすべてが「関連データ」で説明するように、すべてのエンティティで動作します。The Add, Attach, and Update methods all work on the full graph of entities passed to them, as described in the Related Data section. EntityEntry.State プロパティを使用して、単一のエンティティの状態を設定できます。Alternately, the EntityEntry.State property can be used to set the state of just a single entity. たとえば、context.Entry(blog).State = EntityState.Modified のようにします。For example, context.Entry(blog).State = EntityState.Modified.

データの更新Updating Data

EF は、コンテキストによって追跡されている既存のエンティティに対して行われた変更を自動的に検出します。EF will automatically detect changes made to an existing entity that is tracked by the context. これには、データベースから読み込む/クエリするエンティティと、既に追加され、データベースに保存されているエンティティが含まれます。This includes entities that you load/query from the database, and entities that were previously added and saved to the database.

プロパティに割り当てられる値を変更した後、SaveChanges を呼び出すだけです。Simply modify the values assigned to properties and then call SaveChanges.

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

データの削除Deleting Data

エンティティ クラスのインスタンスを削除するには、DbSet.Remove メソッドを使用します。Use the DbSet.Remove method to delete instances of you entity classes.

エンティティが既にデータベースに存在する場合は、SaveChanges の処理中に削除されます。If the entity already exists in the database, it will be deleted during SaveChanges. エンティティがまだデータベースに保存されていない (追加時に追跡される) 場合は、コンテキストから削除され、SaveChanges が呼び出されたときにエンティティが挿入されることはなくなります。If the entity has not yet been saved to the database (i.e. it is tracked as added) then it will be removed from the context and will no longer be inserted when SaveChanges is called.

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

1 つの SaveChanges 内の複数の操作Multiple Operations in a single SaveChanges

複数の追加/更新/削除操作を組み合わせて、SaveChanges の 1 回の呼び出しで使用できます。You can combine multiple Add/Update/Remove operations into a single call to SaveChanges.

注意

ほとんどのデータベース プロバイダーでは、SaveChanges はトランザクションです。For most database providers, SaveChanges is transactional. これは、すべての操作が成功するか失敗するかのいずれかであり、操作の一部のみが適用されることはないことを意味します。This means all the operations will either succeed or fail and the operations will never be left partially applied.

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

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

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

    // remove
    var lastBlog = context.Blogs.Last();
    context.Blogs.Remove(lastBlog);

    context.SaveChanges();
}