EntityFramework Core 2.0のSELECTクエリでTransactionScopeを使用しようとしています。しかし、私はこのエラーを受け取ります:"アンビエントトランザクションへの参加はサポートされていません。"EFコア2.0 TransactionScopeエラー
アイデアは、私が選択クエリを実行するとき(私はそれが代わりにそのオプションを持つことは良い考えではありません知っているが、それはベンダーの要件です)、「NO LOCK」オプションを実装することです。だから私は、拡張メソッド(Entity Framework with NOLOCK)
public static async Task<List<T>> ToListReadUncommittedAsync<T>(this IQueryable<T> query)
{
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions()
{
IsolationLevel = IsolationLevel.ReadUncommitted
}, TransactionScopeAsyncFlowOption.Enabled))
{
var result = await query.ToListAsync();
scope.Complete();
return result;
}
}
を追加し、また、私は周囲のトランザクションの警告を無視するように設定しています。
public static void AddEntityFramework(this IServiceCollection services, string connectionString)
{
services.AddDbContextPool<OptomateContext>(options =>
{
options.UseSqlServer(connectionString);
options.ConfigureWarnings(x => x.Ignore(RelationalEventId.AmbientTransactionWarning));
});
}
そして、私はネットコア2.0のTransactionScopeをサポートしていることを理解
public async Task<Patient> GetPatient(Common.Resources.Patient patient)
{
var pat = await Dbset.Where(x => string.Equals(x.Surname,patient.Surname,
StringComparison.CurrentCultureIgnoreCase)).ToListReadUncommittedAsync();
return pat.FirstOrDefault();
}
私は自分のリポジトリに次のようにクエリを持っています。なぜこの例外が出るのかわかりません。
なぜこのようなことが起こっているのですか?