«System.ObjectDisposedException» при асинхронном получении данных из БД - PullRequest
0 голосов
/ 13 июня 2019

Когда я пытаюсь получить данные из асинхронной базы данных, я получаю следующую ошибку:

Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose() on the context, or wrapping the context in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances. Object name: AsyncDisposer

в этом методе:

private async List<SomeData> TestData()
{
   var testData = await _cache.GetAsync<List<SomeData>("TestData");

        if (testData == null)
        {
            var testData = await MyDbContext.SomeDatas.ToListAsync();

            await _cache.SetAsync<List<SomeData>("TestData", testData);
        }
   return testData;
}

Исключение составляет ToListAsync(), но без асинхронного метода все работает нормально.

DbContext:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
    }

    public virtual DbSet<SomeData> SomeDatas { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new SomeDataConfiguration());

        base.OnModelCreating(modelBuilder);
    }
}

public class SomeDataConfiguration : IEntityTypeConfiguration<SomeData>
{
    public void Configure(EntityTypeBuilder<SomeData> builder)
    {
        builder.ToTable("SomeDatas");

        builder.Property(e => e.Value)
            .IsRequired();
    }
}

1 Ответ

0 голосов
/ 13 июня 2019
using(DbContext db = new DbContext()) {
    data = await db.SomeData.ToListAsync();
}

Использование будет отвечать за распоряжение ресурсами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...