.netでのトランザクションの処理。サブ関数を通じてトランザクションを流すことに関する質問がありました。オブジェクトコンテキストがサブメソッド間で共通する場合は、依存トランザクションを使用する必要がありますか?次のコードでたとえばTransactionScope関数
、 - 私はサブ関数がトランザクションの一部になりたい
public class EmployeeRepository
{
private EmployeeContext ec;
public EmployeeRepository()
{
objectContext = new EmployeeContext();
}
public InitTransaction(EmployeeEntity emp1)
{
using (TransactionScope transaction = new TransactionScope())
{
try
{ ec.employees.AddObject(emp1);
SubFunction1();
ec.SaveChanges();
}
catch
{
//catch
}
}
//commit the transaction here
ec.AcceptAllChanges();
}
public SubFunction1()
{
//some processing
//using same object context
ec.someother.AddObject(someobject);
ec.SaveChanges();
}
}
(これはベストプラクティスであるかどうかわからない)私のクラスのコンストラクタでオブジェクトコンテキストを宣言同じように? この場合、同じオブジェクトコンテキストを使用していても、SubFunction1内で依存トランザクションを使用する必要がありますか?または、SubFunction1内に
using (TransactionScope transaction = new TransactionScope());
を追加する必要があります。正しい方向へのポインタは非常に高く評価されるでしょう。
を見ては、今、私の質問は - としての私のコードの作品が-i.e.あります同じオブジェクトコンテキストを使用すると、subfunction1はトランザクションの一部になります。 SubFunction1でトランザクションを明示的に開始する必要があります。 – user275157
はい - 動作します - SubFunction1(およびSubFunction1によって呼び出されるもの)は、デフォルトで、TransactionScopeに登録されます。 *コンテキストやSQLConnectionsなどの「トランザクション」認識リソースは自動的に登録されます。 – StuartLC
入力いただきありがとうございます。したがって、subfunction1の新しいトランザクションスコープはありません。また、分離レベルで - 私はmysqlを使用しており、失敗したトランザクションをエンドユーザにバブリングするオプションがあります(再試行するために)。だから、シリアライズ可能な読書は安全だと思った。私は、分離レベルをコミットして再コミットする必要がありますか? – user275157