2014/01/03

[Entity Framework] ObjectContext.SaveChanges メソッドは内部でトランザクション制御を行っている


Entity Framework の ObjectContext.SaveChages メソッドは内部でトランザクション制御をしているので、データの更新に失敗すると自動的にロールバックされ例外をスローします。

ですので、特別にトランザクション処理を行う必要はありません。

SaveChanges がトランザクション内で動作します。 ダーティな ObjectStateEntry オブジェクトのいずれかを永続化できない場合、SaveChanges はそのトランザクションをロールバックし、例外をスローします。

ObjectContext.SaveChanges メソッド (System.Data.Objects)

以下のコンソールアプリケーションで動作検証しましたが、3件追加するうちの1件エラーなのですが、3件ともデータ追加されず、正しくロールバックされたことが分かります。

・Item.cs

public class Item
{
public int Id { get; set; }

[Required]
public string Name { get; set; }

public int Price { get; set;}

[Timestamp]
public byte[] TimeStamp { get; set; }
}

・ItemContext.cs

public class ItemContext:DbContext
{
  public DbSet<Item> Items { get; set; }
}

・Program.cs

class Program
{
  static void Main(string[] args)
  {
    //データベース初期化
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ItemContext>());

    using (var context = new ItemContext())
    {
      var item1 = new Item() { Name = "ボールペン", Price = 100 };
      context.Items.Add(item1);

      var item2 = new Item() { Name = "シャープペン", Price = 100 };
      context.Items.Add(item2);

      //エラーインスタンス
      var item3 = new Item() {};
      context.Items.Add(item3);
      try
      {
        context.SaveChanges();

        Console.WriteLine("正常終了");

      }
      catch (Exception)
      {
        Console.WriteLine("例外発生");
      }

      Console.ReadKey();
    }
  }
}

■参考サイト


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール