我似乎无法找到此问题的答案。EF核心多个HTTP请求会引发错误
因此,在用户加载页面的前端,我们调用该页面上每个项目的API(10项)。这等于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.
现在我明白了实体框架是不是线程安全的,但我不确定如何解决这个错误。
无处不在我使用DBContext它始终注入使用内置.net核心Ioc容器。
这里是DI设置
services.AddScoped<IOmbiContext, OmbiContext>();
services.AddTransient<ISettingsRepository, SettingsJsonRepository>();
我所有的仓库根据这篇文章是在Transient
范围与上下文为Scoped
设置: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