Итак, у меня есть класс, который выглядит примерно следующим образом. Существует поток, который выполняет некоторую работу с использованием кода Entity Framework First DbContext.Entity Framework - Влияет на MultipleActiveResultSets на кеширование
Проблема, с которой я сталкиваюсь, заключается в том, что, как представляется, контекст m_DB является кешированием данных, хотя он должен быть удален и воссоздан для каждого цикла обработки.
Что я видел, так это то, что некоторые данные в отношениях отсутствуют в загруженных моделях. Если я убью и перезапустим процесс, данные будут найдены точно так же, как должно.
Единственное, что я могу придумать, это приложение использует MultipleActiveResultSets = true в строке подключения к базе данных, но я не могу найти ничего ясно из того, что это приведет к поведению, которое я вижу.
Любое понимание будет оценено по достоинству.
public class ProcessingService
{
private MyContext m_DB = null
private bool m_Run = true;
private void ThreadLoop()
{
while(m_Run)
{
try
{
if(m_DB == null)
m_DB = new MyContext();
}
catch(Exception ex)
{
//Log Error
}
finally
{
if(m_DB != null)
{
m_DB.Dispose();
m_DB = null;
}
}
}
}
private void ProcessingStepOne()
{
// Do some work with m_DB
}
private void ProcessingStepTwo()
{
// Do some work with m_DB
}
}
Единственное, что кэшируется в AppDomain, это модель EF (модель хранилища, концептуальная модель и отображение), а не данные. Это действительно зависит от того, что вы делаете в цикле. Не могли бы вы показать немного больше? –
Вот что я читал и понял, но я определенно получал устаревшие/кэшированные данные. Я отправил ответ на то, что, как я думаю, происходит. – raytiley