0

データベースとしてSqlServerCEを使用するEntityFramework4を使用しています。

SqlServer CEはTransactionScopeをサポートしていないため、BeginTransactionメソッドとRollbackTransactionメソッドを使用する必要があります。

データベース内の行を削除および作成するための2つのGRUD関数があります。

私が達成したいのはこのようなものです:

    using (var context = new MyContext())
                {
                    using (var tx = context.BeginTransaction()) 
                    { 
                       // grud functions
                       deleteRows();
                       addRows();

                       // do db stuff here... 
                       tx.Commit(); 
                    } 
                }

しかし、コンテキストでBeginTransactionが見つかりません。

どうすればそれについて行くことができますか?

4

2 に答える 2

2

どうすればいいですか

の概念を誤解していると思いますDbContext。これは、エンティティ+変更トラッカーのローカルキャッシュです。エンティティをどのように処理する場合でも、この変更は、基になるデータソースに影響を与えることなく、コンテキストによって追跡されます。

これはすべて、メソッドを呼び出すまで発生しますSaveChanges。この方法では、変更トラッカーからデータソースへの変更がトランザクション方式で適用されるため、行ったすべての変更に一貫性があります。

あなたがあなたのとを書いてdeleteRowsaddRows彼らが呼び出さないようにし、これらのメソッドの外のどこかに呼び出しSaveChangesを置くなら、あなたは望ましいトランザクションを得るでしょう:SaveChanges

using (var context = new MyContext())
{
    // grud functions
    deleteRows(context);
    addRows(context);

    context.SaveChanges();
}

private void deleteRows(MyContext context) {}
private void addRows(MyContext context) {}
于 2012-09-21T06:35:11.127 に答える
0

ObjectContextでは、BeginTransaction()はConnectionのメソッドであり、ObjectContext ただし、基になる接続に直接DbContext公開します。BeginTransactionでは、おそらくDbContextを使用していませんか?

試す

context.Connection.BeginTransaction()
于 2012-09-21T06:39:31.350 に答える