Entity Framework 5.0 및 SQLite 데이터베이스를 사용하고 있습니다. 데이터베이스 레코드를 수정 한 다음 동일한 테이블의 엔티티 개체 인스턴스를 사용하여 동일한 레코드를 읽는 시나리오가 있지만 이전 값을 얻습니다. 디버깅하는 동안 내 데이터베이스 도구로 이동하여 레코드를 보면 변경 사항이 있지만 EF가 해당 파일을 선택하지 않습니다. 그것은 나중에 그들을 데리러 갈 것이지만 나는 그것이 언제인지를 판단 할 수 없다.Entity Framework SaveChanges가 오래된 값을 가져옵니다.
다음은 코드 단편입니다. 우선 업데이트 사용 SaveChanges를()를 수행
이tblTest efTestTbl = context.tblTests.Find(recID);
context.tblTests.Attach(efTestTbl);
efTestTbl.Value1 = "newValue"; // This changed it from "oldValue" :-)
int changedRecs = context.SaveChanges();
이 코드는 위의 항상 작동하는 것 같다 데이터베이스에 변경 사항을 저장합니다. changedRecs는 1이됩니다. 코드에서이 지점 다음에 중단하고 데이터베이스 도구를 사용하여 데이터베이스의 값을 볼 수 있으며 열은 "newValue"와 같습니다. 내가 컨텍스트 개체의 직접 다른 테이블 객체와 이전 업데이트 후 다음 읽기,하지만 동일한 인스턴스를 수행하는 경우 이제
:
tblTest efTestTbl = context.tblTests.Find(recID);
efTestTbl.Value1의 값은 "oldValue입니다"를 동일합니다 . 나는 아무것도 캐싱하지 않는 EF에 대한 의견을 보았지만 그것이 사실이라고 믿을 수는 없다. 다른 포럼에서 ObjectQuery에 대한 MergeOption에 대한 대화를 보았고 캐싱을 "신원 확인"이라고했습니다. 이 정보는 유익했지만 쿼리와 "ExecuteNonQuery()"메서드를 사용하지 않아서 도움이되지 않았습니다.
필자의 시나리오에서는 변경 사항을 기록한 다음 데이터베이스에서 확인 단계로 변경 내용을 읽고 기록해야합니다.
캐시를 플러시하는 방법을 찾으면 도움이 될 것입니다.
코드에서 동일한 컨텍스트 인스턴스를 사용하고 있습니까? –