EF로로드 한 데이터 목록이있는 눈금이있는 WPF 응용 프로그램이 있습니다. 다른 윈도우는 그리드에로드 된 동일한 데이터를 변경하지만 다른 dbcontext 인스턴스를 사용할 수 있습니다. 그리드에서 변경된 데이터를 보려면 어떻게해야합니까? ctx.Entry<MyEntity>(instance).Reload();
으로 단일 개체를 새로 고칠 수 있다는 것을 알고 있지만 모든 변경 사항을보고 싶습니다. 그리고 내가하는 일과 관계없이 이전 값만 볼 수 있습니다. 이 경우에는 AsNoTracking
을 사용하여 DbContext
인스턴스를 새로 만들 수 없습니다.다른 DbContext에서 변경 내용로드
답변
매우 간단한 경우처럼 보입니다. 왜 EF가 단지 엔티티 값을 업데이트하지 않는지 알 수 없습니다.
EF에도이 메커니즘이 있지만 DbContext API에는 노출되지 않습니다. ObjectContext로 되돌아 가야합니다. 방금 엔티티 세트 다시로드하려는 경우 호출됩니다
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.Refresh(RefreshMode.StoreWins, listOfEntitiesToReload);
RefreshMode.StoreWins
모든 보류중인 변경 내용이 다시로드 값으로 덮어 쓰게됩니다. RefreshMode.ClientWins
을 사용하여 변경 사항을 유지하고 다시로드 된 데이터와 병합 할 수도 있습니다. 이 접근 방식의 문제점은 이미 가지고있는 엔티티 만 다시로드한다는 것입니다. 당신은 새로운 실체를 얻지 못할 것입니다.
당신은 새로운 엔티티를 얻을뿐만 아니라 쿼리를 실행해야하고 당신이 값을 다시로드 할 EF 알려 주어야합니다 : 다시
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objectSet = objectContext.CreateObjectSet<MyEntity>();
objectSet.MergeOption = MergeOption.OverwriteChanges;
var result = objectSet.Where(...).ToList();
MergeOption.OverwriteChanges
모든 보류중인 변경 내용을 덮어을하지만 병합 MergeOption.PreserveChanges
을 사용할 수 있습니다 편집 된 값에 값을 다시로드했습니다.
필자는 데이터베이스에서 삭제 된 엔티티와 관계가있는 리프레시와 관련된 문제가 여전히있을 수 있다고 생각합니다.
이것은 정확하게 내가 필요로하는 것입니다. 감사합니다. EF에 대한 나의 믿음이 회복되었습니다 :) – user1526627
@ ladislav-mrnka 질문 하나, 마지막 단계가 정말로 필요한 것입니까? 내가 너를 올바르게 이해했다면, EF는 이미 이미로드 된 레코드에 대한 변경 사항을 인식하고 첫 번째 방법으로 병합합니다. 따라서 테이블에 새로운 행을 수동으로 추가하는 경우 첫 번째 방법을 사용하여 dbcontext로 업데이트되지 않습니다. 나는 이것을 시도하고 두 번째 방법이 필요 없다는 것을 알았다. 어쩌면 행동이 바뀌거나 완전히 오해 한 것일까 요? :) – DrCopyPaste
- 1. 다른 URL 페이지의 태그 내용로드
- 2. GWT : 다른 클래스의 패널 내용로드
- 3. Drupal 6 - 리디렉션없이 다른 내용로드
- 4. AJAX 내용로드
- 5. DIV에 onclick, 다른 div의 데이터베이스에서 내용로드
- 6. DbContext에서 테이블 감사
- 7. DBContext에서 뷰 사용
- 8. UIWebView를 표시하기 전에 내용로드
- 9. jQuery로 PHP 파일에서 내용로드
- 10. jQuery/Ajax로 내용로드
- 11. 요소로 내용로드 뷰로 스크롤
- 12. 데이터베이스에서 TreeTable에 내용로드
- 13. SplashActivty에 AndEngine의 일부 내용로드
- 14. 'SubmitChanges'가 실패했지만 다른 제출이 필요한 경우 DBContext에서 데이터 변경 사항을 롤백하는 방법은 무엇입니까?
- 15. iframe에서 인라인 내용로드
- 16. jquery를 사용하여 내용로드
- 17. .NET MVC 3 Dbcontext에서 롤백
- 18. EntityFramework의 DbContext에서 인터페이스 유형 공개
- 19. 자바 스크립트없이 내용로드
- 20. 변수에 데이터베이스 내용로드
- 21. 요청시 DIV 태그에 내용로드
- 22. Extjs 아약스에서 패널 내용로드
- 23. 프레임 내용로드 됨 이벤트
- 24. 사용하기 전에 내용로드
- 25. TextInput Flex에 내용로드?
- 26. iOS : 서버에서 UIWebView 내용로드
- 27. 로딩 막대에 새로운 내용로드
- 28. jquery로 파일 내용로드
- 29. 내용로드 및 스타일 추가
- 30. 다른 웹 사이트의 div에서 현재 페이지의 iframe으로 내용로드
왜 'AsNoTracking'을 사용할 수 없습니까? –
사용자가 눈금을 직접 변경하여 저장할 수 있기 때문에. – user1526627
그런 경우 저장하지 않은 데이터를 편집 할 수 있으며 다시로드하면 데이터가 달라질 수 있습니다. 그러한 문제를 어떻게 해결하고 싶습니까? –