Мой проект получил исключение:
System.ObjectDisposedException: 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.
Я искал ответ, но получил только AddScoped
или AddTransient
вместо AddSingleton
. Но в моем коде это уже AddScoped
. Затем я отслеживаю создание и удаление, добавляя этот код в конструктор и метод Dispose.
Конструктор:
crrGuid = Guid.NewGuid(); //this is a field I added to tracking
Console.WriteLine("Created: " + crrGuid.ToString());
Метод Dispose:
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
Console.WriteLine("Disponsing :" + crrGuid.ToString());
}
И это консоль я получил после выполнения 2 запроса. Во-первых, это работает, я могу получить свои данные. Но второго запроса нет, он выдал исключение, даже если мой метод Dispose еще не вызван (см. Последнюю строку на снимке экрана консоли):
I получил это исключение только с некоторыми Entity / Table, другие работают нормально.
PS: У меня слишком много кода, я не знаю, чем поделиться. Прокомментируйте, пожалуйста, если бы я мог опубликовать c, я отредактирую свой пост
Редактировать 1: добавить конструктор и метод Dispose на самом деле в моем DBContext
public Context([NotNull]DbContextOptions options) : base(options)
{
Guid = Guid.NewGuid();
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Create DbContext:" + Guid);
Console.ResetColor();
}
public override void Dispose()
{
base.Dispose();
Console.WriteLine("Dispose DbContext:" + Guid);
}
Предложенный дубликат
Я прочитал предложенный дубликат , и я думаю, что мой случай отличается, потому что я нашел причину. Причина в моем преобразовании в моем DBContext. Ответ в связанном топи c определенно не помог мне в решении этой проблемы.