この質問に対する回答は見つかりませんでした。EFコアの複数のHTTP要求でエラーが発生する
フロントエンドでは、ユーザーがページを読み込むときに、そのページの各アイテム(10個のアイテム)ごとにAPIを呼び出します。つまり、10個のAPI呼び出しに相当します。
呼び出しの大部分は動作しますが、次のエラーが発生したデータベースを照会しようとすると失敗することは数が常にあります。
InvalidOperationException: A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.
は、今私は、Entity Frameworkはスレッドセーフではないことを理解しますが、私はわかりませんよこのエラーを回避する方法。
どこでも私はDBContextを使用していますが、これは常に組み込みの.netコアIocコンテナを使用して注入されます。ここで
は、DIの設定
services.AddScoped<IOmbiContext, OmbiContext>();
services.AddTransient<ISettingsRepository, SettingsJsonRepository>();
は私のリポジトリのすべては、この記事によるとScoped
としてコンテキストとTransient
範囲に設定されている:https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6
は今、私はTransient
にコンテキストを変更しようとしていますそれはまだ起こります。
どうすればこの問題を回避できますか?
詳細情報
APIメソッド:
[HttpGet("movie/info/{theMovieDbId}")]
public async Task<SearchMovieViewModel> GetExtraMovieInfo(int theMovieDbId)
{
return await MovieEngine.LookupImdbInformation(theMovieDbId);
}
最終的に例外がスローされている場合、次の呼び出します:
public async Task<RuleResult> Execute(SearchViewModel obj)
{
var item = await PlexContentRepository.Get(obj.CustomId); <-- Here
if (item != null)
{
obj.Available = true;
obj.PlexUrl = item.Url;
obj.Quality = item.Quality;
}
return Success();
}
PlexContentRepository
をpublic PlexContentRepository(IOmbiContext db)
{
Db = db;
}
private IOmbiContext Db { get; }
public async Task<PlexContent> Get(string providerId)
{
return await Db.PlexContent.FirstOrDefaultAsync(x => x.ProviderId == providerId); <-- Here
}
これが適用されますhttps://stackoverflow.com/questions/20628792/multi-async-in-entity-framework-6#20635076 – Nkosi
@Nkosiいいえ、すべてがずっと使ってスタックダウン完全に非同期であります'async'と' await'キーワードです。 –
エラーをスローするAPIを表示することができます – Nkosi