ASP.NET MVC 웹 사이트에서 DbLinq를 사용하여 MySQL 용 SQL에 linq를 사용하고 있습니다. 이상한 캐싱 문제가 있습니다. 내 저장소 클래스에서 다음과 같은 방법을 고려하십시오DbLinq - 캐시 문제
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
이 MessageFrom
과 MessageTo
값이 변화하는 10 개 이상의 결과를 가지고 있음에도 불구하고, 나는 단지 첫 번째로 쿼리 된 결과만을 반환합니다. 그래서 GetInbox(4374)
으로 전화하면 메시지 A와 메시지 B가 나옵니다. 나중에 GetInbox(526)
을 호출하면 메시지 A와 B가 나타납니다. 은 메시지 C와 D는 입니다.의 사용자 ID는 526입니다. 응용 프로그램을 사용하여 변경 사항을 확인하십시오.
여기 무슨 일 이니? 나는 누군가가 나에게 그것을 지적 할 때 내가 부끄러워 할 정도로 어리석은 뭔가를하고 있다고 확신한다. 내가 아주 바보 같은 짓을하지 않는다면, 나는이 문제가 매우 이상하다는 것을 알게된다. 나는 DataContext를 재사용하지 않는다는 것에 대해 읽었지 만 나는 그렇지 않다. 왜이 캐싱 문제입니까? 다음은 내 컨트롤러 코드입니다,하지만 난 그게 중요한 의심 :
SO에 비슷한 질문이 있지만[Authorize]
public ActionResult Inbox(int userId)
{
Mailbox inbox = new Mailbox(userId, this.messageRepository.GetInbox(userId));
return PartialView("Inbox", inbox);
}
, 나는이 정확한 질문에 대한 답을 발견하지 않았습니다. 많은 감사합니다! 그것은, 그 다음 잘 작동 return repo.Messages.ToList().Where(m => m.MessageFrom == userId);
수정 :에 코드를 변경 :
UPDATE. 캐시 문제 같은데. 그러나 물론 나는 그런 식으로 고치고 싶지 않습니다. 쿼리 후 datacontext가 삭제되지 않도록 코드를 변경하면 이 아닌이 문제를 해결합니다.
이것은 바보 같지만, Asp.Net 캐싱 메커니즘과 관련이 없습니다. – Micah
글쎄, 나는 처음에는 그것을 두려워했다. 하지만 내 MailBox 클래스 내에서 명확하게 전달할 빈 IEnumberable을 볼 수 있습니다. 또는 그 문제에 대한 이전 데이터가 있습니다. 그래서 그게 문제가 아닙니다. –
Razzie
DbLinq (의견에서) 경우 태그의 제목을 변경하고 태그를 변경해야합니다. DbLinq는 거의 공유하지 않을 수 있습니다 ... LINQ-to-SQL에 대해 묻는 것은 당신을 도울 것입니다 ;-p –