Я пытаюсь вызвать несколько запросов на моем dbcontext
. Я сохранил данные в БД и сейчас пытаюсь снова извлечь данные в потоке, чтобы выполнить дальнейшую обработку, но не могу этого сделать. dbcontext
отображается как распоряжение.
Я попытался изменить срок службы dbcontext
для одноэлементного и переходного процесса с области по умолчанию, а также изменил время жизни классифицированного вызова dbcontext
для переходного процесса.
Добавление услуг:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<PearlIDPContext>(options => options.UseMySQL(Configuration.GetConnectionString("IDPDatabase")), optionsLifetime: ServiceLifetime.Transient);
services.AddScoped<IScanDataRepository, ScanDataRepository>();
services.AddScoped<IOperationsRepository, OperationHistoryRepository>();
services.AddScoped<IExtractedDataRepository, ExtractedDataRepository>();
services.AddScoped<IExtractedColorsRepository, ExtractedColorsRepository>();
services.AddScoped<IRejectionsRepository, RejectionsRepository>();
services.AddScoped<IStartProcess, StartProcess>();
}
Класс модификации Db:
public class ScanDataRepository : IScanDataRepository
{
private readonly PearlIDPContext context;
public ScanDataRepository(PearlIDPContext context)
{
this.context = context;
}
public async Task<ScanData> AddAsync(ScanData scan) [modified]
{
context.ScanData.Add(scan);
await context.SaveChangesAsync();
return scan;
}
public ScanData GetScanData(string pearlId)
{
return context.ScanData.FirstOrDefault(o => o.PearlId == pearlId);
}
}
вызовы класса модификации:
scanDataRepository.AddAsync(scanData);
try
{
Logger.WriteToLogFile("Fetching Scan details from database for pearlID : " + pearlId, pearlId);
scanData = scanDataRepository.GetScanData(pearlId); // this is line 39
int id = scanData.ScanId;
Logger.WriteToLogFile("Fetching Scan details from database successful for pearlID : " + pearlId + ". DB table id : " + id, pearlId);
}
catch (Exception ex)
{
Logger.WriteToErrorFile("Error getting data from databse. Pearl ID : " + pearlId + ". Error : " + ex.ToString());
}
Ошибка при полученииданные из базы данных. Жемчужина ID: PI09889. Ошибка: System.ObjectDisposedException: невозможно получить доступ к удаленному объекту. Распространенной причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимости, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения. Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using. Если вы используете внедрение зависимости, вы должны позволить контейнеру введения зависимости позаботиться об удалении экземпляров контекста. Имя объекта: «PearlIDPContext». в Microsoft.EntityFrameworkCore.DbContext.CheckDisposed () в Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies ()
в Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Internal.IDbContextDependencies.get_StateManager () в Microsoft.EntityFrameworkCore.Query.QueryContextDependencies. get_StateManager () в Microsoft.EntityFrameworkCore.Query.QueryContext.get_StateManager () в Microsoft.EntityFrameworkCore.Query.QueryContext.BeginTrackingQuery () в Microsoft.EntityFrameworkCore.Query.Intor.TraverQueryContext queryContext, IList`1 entityTrackingInfos, IList`1 entityAccessors) + MoveNext () в Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext (.RueF) .Tegn.Tegn.Tegn.ExeF. `1 источник, логическое и найдено) в System.Linq.Enumerable.First [TSource] (источник IEnumerable`1) в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler. <> c__DisplayClass15_1`1.b__0 (QueryContext qc) в Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute [TResult] (запрос выражений) в Microsoft.EntityFrovid.ExueryQueryUueryUueryUuCu[TResult] (выражение выражения) в System.Linq.Queryable.FirstOrDefault [TSource] (источник IQueryable`1, предикат Expression`1) в MyndIT.Models.ScanDataRepository.GetScanData (String pearlId) в D: \ Projects \ Github \ PearlID\ MyndIT \ Models \ ScanDataRepository.cs: строка 33 в MyndIT.StartProcess.ProcessStart (String pearlId) в D: \ Projects \ Github \ PearlIDP \ MyndIT \ StartProcess.cs: строка 39