4

objectContext SaveChanges メソッド (EntityFramework 5) の同じトランザクションを使用して StoredProc を呼び出す方法を誰かが知っていますか?

目標は、オブジェクトの変更を適用し、DB で何らかの「魔法」を行うストアド Proc を呼び出すことですが、(SaveChanges または SP の実行で) 何か問題が発生した場合、変更はまったくコミットされません。

4

1 に答える 1

3

手順:

  1. コンテキストを作成する
  2. コンテキストから接続を取得する
  3. トランザクションを作成します (TransactionScope)
  4. 接続を開きます (3. で作成したアンビエント トランザクションに接続を登録し、コンテキストによって接続が閉じられないようにします)
  5. SaveChanges() を実行します
  6. ストアド プロシージャを実行する
  7. トランザクションをコミットする
  8. 接続を閉じる

いくつかのコード (MyContext は DbContext から派生しています):

using (var ctx = new MyContext())
{
    using (var trx = new TransactionScope())
    {
        var connection = ((IObjectContextAdapter)ctx).ObjectContext.Connection;
        try
        {
            ctx.Entities.Add(new MyEntity() { Number = 123 });
            ctx.SaveChanges();

            ctx.Database.ExecuteSqlCommand("INSERT INTO MyEntities VALUES(300)");
            trx.Complete();
        }
        finally
        {
            connection.Close();
        }
    }
}
于 2012-11-28T03:56:18.217 に答える