いくつかの Entity Framework db I/o を TransactionScope 内にラップしたいと考えています。一般的にはうまく機能しています。しかし:基本的に次のようなケースがあります:
using (var tx=new TransactionScope())
{
using (var cx=new MyDbcontext())
{
var myrecord=cx.somerecorord.find(someid);
if (Roles.IsUserInRole(username, "admin"))
DoAdminThing(myrecord);
else
DoNonAdminThing(myrecord);
cx.SaveChanges();
}
}
これは、Roles.IsUserInRole で「プロバイダーが ProviderManifestToken 文字列を返さなかった」というエラーで爆発します。
EF TransactionScope 内で asp.net セキュリティ db I/o を実行するのが好きではないようです。これを回避する方法はありますか?
ロールのものをトランザクションの前に移動する必要はありません。それには、論理的にぶら下がっている関数を分割する必要があります。