>

Entity Framework를 사용하여 데이터베이스를 쿼리하려고하는데 데이터를 얻는 데 사용하는 다음 코드가 있습니다.

var students= MyEntities.Students.Where(s => s.Age > 20).ToList();

이 코드는 제대로 작동하고 올바른 데이터를 반환합니다. 그러나이 코드를 실행 한 다음 데이터베이스로 이동하여 레코드를 업데이트 하여이 코드가 반환 해야하는 데이터를 변경 한 다음 앱을 종료하지 않고이 코드를 다시 실행하면 원래 데이터가 표시됩니다. 나는 그것이 잘 작동하는 데 확신하지만 지금은 데이터를 새로 고치지 않습니다.

  • 답변 # 1

    아직 작동하지 않았습니다. 이는 ID 맵 (여기 설명)이라는 엔티티 프레임 워크 (및 많은 ORM 도구)의 필수 동작입니다.

    같은 컨텍스트에서 쿼리를 실행하면 엔터티가 업데이트되지 않습니다. 두 쿼리 실행 사이에 데이터베이스에서 생성 된 새 엔터티 만 추가합니다. EF가 엔티티를 다시로드하도록하려면 다음과 같이해야합니다.

    ObjectQuery query = MyEntities.Students;
    query.MergeOption = MergeOption.OverwriteChanges;
    var students = query.Where(s => s.Age > 20).ToList();
    
    

  • 답변 # 2

    EF가 데이터를 캐시하기 때문에 문제가 발생 했으므로 데이터가 장면 뒤에서 변경되고 컨텍스트를 폐기/다시 열지 않으면 문제가 발생할 수 있습니다.

    일반적으로 경험의 수명을 가능한 짧게 유지하여 방금 언급 한 것과 같은 문제를 피하는 것입니다.

    위에서 말한 내용은 무시하지 말고 DB에서 새로 고침을 원하면 Refresh () 메서드를 사용할 수 있습니다.

관련 자료

  • 이전 c++ - 값으로 전달하는 것보다 더 비싼 참조로 전달
  • 다음 cron 표현식을 멋진 설명 문자열로 변환 하시겠습니까? JAVA 및 Objective-C 용 라이브러리가 있습니까?