Я использую linq to sql для MySql (используя DbLinq) на веб-сайте ASP.NET MVC. У меня странная проблема с кэшированием. Рассмотрим следующие методы в моем классе репозитория:
public IEnumerable<Message> GetInbox(int userId)
{
using(MyDataContext repo = new MyDataContext(new MySqlConnection("[Connectionstring]")))
{
return repo.Messages.Where(m => m.MessageTo == userId);
}
}
public IEnumerable<Message> GetOutbox(int userId)
{
using (MyDataContext repo = new MyDataContext(new MySqlConnection("[Connectionstring]")))
{
return repo.Messages.Where(m => m.MessageFrom == userId);
}
}
'MyDataContext' - это сгенерированное DbLinq отображение на мою базу данных, которое наследуется от DataContext. Я не использую здесь этот текстовый код данных (приведенный выше код выглядит немного глупо, но я хотел быть абсолютно уверенным, что это не какая-то проблема повторного использования datacontext / mysqlconnection).
Что происходит, то, какой бы из двух методов я ни вызывал, с любым идентификатором пользователя, результаты остаются неизменными. Период. Несмотря на то, что я вижу, что repo.Messages
имеет более 10 результатов с различными значениями MessageFrom
и MessageTo
, я получаю только первые запрошенные результаты. Поэтому, если я звоню GetInbox(4374)
, это дает мне сообщение A и сообщение B. После вызова GetInbox(526)
все равно я получаю сообщения A и B, хотя есть сообщения C и D, которые делают ИД пользователя 526. Мне нужно перезапустить приложение, чтобы увидеть изменения.
Что здесь происходит? Я уверен, что я делаю что-то настолько глупое, что мне будет стыдно, когда кто-то указывает мне на это. Если я не делаю что-то очень глупое, тогда я нахожу эту проблему очень странной. Я читал о том, чтобы не использовать DataContext, но это не так. Почему эта проблема с кешированием? Ниже приведен код моего контроллера, но я сомневаюсь, что он имеет значение:
[Authorize]
public ActionResult Inbox(int userId)
{
Mailbox inbox = new Mailbox(userId, this.messageRepository.GetInbox(userId));
return PartialView("Inbox", inbox);
}
Хотя есть и похожие вопросы по SO, я не нашел ответа на этот точный вопрос. Большое спасибо!
UPDATE :
изменив код на: return repo.Messages.ToList().Where(m => m.MessageFrom == userId);
исправляет это, тогда он работает нормально. Похоже, какая-то проблема с кешем. Тем не менее, я, конечно, не хочу это исправить таким образом.
Измените код таким образом, чтобы текстовый текст не располагался после того, как запрос не решил проблему.