Это старый вопрос, но я решил опубликовать свой ответ на тот случай, если он кому-нибудь поможет.
Я столкнулся с такой же проблемой в своем коде MVC, даже используя шаблон единиц работы, как уже упоминалось.Элад Бенда.Я обнаружил, что мой ресурс DbContext не освобождается в конце вызова контроллера.
using (_DatabaseUow)
{
// your controller code that accesses the database here.
} // When this goes out of scope dispose is called.
Затем удалите класс DatabaseUnitOfWork
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing == true)
{
_ObdDbContext.DetachAll();
_ObdDbContext = null;
_ObdBusinessData = null;
}
}
~DatabaseUnitOfWork()
{
Dispose(false);
}
Элемент _ObdBusinessData похож на хранилище.Наконец, метод DetachAll () в производном классе DbContext выглядит следующим образом:
public void DetachAll()
{
var entries = SetTestsOnlineData.Local;
while (entries.Count != 0)
{
TestsOnlineData tod = entries[0];
Tests tro = entries[0].Tests;
List<TestsDtc> dtcs = entries[0].Tests.TestsDtcs.ToList();
foreach (TestsDtc dtc in dtcs)
Detach(dtc);
Detach(entries[0].Tests);
Detach(entries[0]);
tro.TestsDtcs = dtcs;
tro.TestsOnlineData = tod;
tod.Tests = tro;
}
}
public void Detach(object entity)
{
((IObjectContextAdapter)this).ObjectContext.Detach(entity);
}
Я использовал определенные знания о своих сущностях / объектах, чтобы отсоединить все в памяти.У меня есть таблица с именем TestsOnlineData.Он ссылается на Tests, который ссылается на список TestsDtc.Обратите внимание, я сохраняю эти связи ссылок, так как корень моего дерева объектов будет сохранен, но DbContext освободит остальные, когда они отсоединятся.
Я бы хотел сделать это более общим, но это сработало.Надеюсь, это поможет.