현재 삭제 된 항목이 많은 엔티티 모델이 있으므로 상태가 삭제됩니다. '삭제 취소'할 수있는 방법이 있습니까? 어떤 항목을 삭제 취소할지 알고 있지만 항목을 삭제 취소하는 방법을 모르겠습니다. 이상적으로는 변경되지 않은 상태로 되돌려 놓고 싶습니다.엔티티 상태 변경
답변
연결 컨텍스트를 커밋하지 않을 수 있습니까? - objectContext.SaveChanges()를 호출하지 않고 ObjectContext를 처리하십시오. 물론, 당신이 구원을 얻지 못하는 어떤 변화가 있다면, 그것들도 존속하지 않을 것입니다.
objectContext.DeleteObject(x)
으로 전화를 걸었 으면 삭제를 취소하고 변경 사항을 저장할 수 없습니다.
ObjectStateEntry objectStateEntry = objectContext.ObjectStateManager.GetObjectStateEntry(x);
// objectStateEntry.State is not setable
ObjectStateEntry는 이론적으로 고심의 ObjectContext를 종료, 원래의 변경, 마이너스 원치 않는 사람을 대표하는 컬렉션을 다시 새를 열고 이러한 변경을 뺀 원치 않는를 재 구축 할 수 있도록 OriginalValues 속성을 가지고있다 거기에있는 것들. 아마도 번거롭게 할만한 가치는 없겠지만, 현재로서는 삭제할 항목을 해제 할 수있는 문서화 된 방법이 없습니다.
당신이 전화 후
objectContext.DeleteObject (x)의,
당신은 X
objectContext.Detach와 객체 의 삭제 취소를 시뮬레이션 할 수 있습니다 (X); objectContext.Attach (x)
Context, ObjectSet 또는 EntityObject에 대해 RejectChanges 메서드를 구현할 수 있습니다. 지금은 VB 코드는 이러한 방법의 총수 : 확장 방법을 상황에 RejectChanges을 위해 : EntityObject에 대한 RejectChanges를
<Extension()>
Sub RejectChanges(Of T As MyEntity)(ByVal Lst As ObjectSet(Of T))
Dim collection As IEnumerable(Of T) = From o In Lst.AsEnumerable() Where o.EntityState = EntityState.Modified Or o.EntityState = EntityState.Deleted Select o
Lst.Context.Refresh(RefreshMode.StoreWins, collection)
Dim AddedCollection As IEnumerable(Of T) = (From e In Lst.Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added) Select e.Entity).ToList().OfType(Of T)()
For Each entity As T In AddedCollection
Lst.Context.Detach(entity)
Next
End Sub
을 마지막으로 구현 : ObjectSet에서 RejectChanges을 구현하기위한
<Extension()>
Sub RejectChanges(ByVal Context As ObjectContext)
Dim Collectin As IEnumerable(Of Object) = From e In Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified Or System.Data.EntityState.Deleted) Select e.Entity
Context.Refresh(RefreshMode.StoreWins, Collectin)
Dim AddedCollection As IEnumerable(Of Object) = From e In Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added) Select e.Entity
For Each addedEntity As Object In AddedCollection
Context.Detach(addedEntity)
Next
End Sub
확장 mehod
<Extension()>
Sub RejectChanges(ByVal entity As EntityObject, ByVal Context As ObjectContext)
If entity.EntityState = EntityState.Modified OrElse entity.EntityState = EntityState.Deleted Then
Context.Refresh(RefreshMode.StoreWins, entity)
ElseIf entity.EntityState = EntityState.Added Then
Context.Detach(entity)
End If
End Sub
바이. [Iman Shabanzade]
- 1. UIButton 지연된 상태 변경
- 2. 완료 후 상태 변경
- 3. 오브젝트의 상태 변경
- 4. 제한이있는 상태 변경
- 5. ViewModels에서 공유 상태/변경
- 6. IKImageBrowserView의 선택 상태 변경
- 7. 브라우저 탭 상태 변경
- 8. 상태 변경 방법
- 9. iOS4에서 통화 상태 변경
- 10. JRadioButton 상태 변경 감지
- 11. 변경 struct-object 상태
- 12. 엔티티 행의 변경 사항을 취소하십시오.
- 13. Entity Framework 4.1에서 엔터티 상태 변경
- 14. mysql의 이벤트 스케줄러 상태 변경
- 15. boost :: statechart에서 상태 기록 변경
- 16. 네트워크 상태 변경 이벤트 캡처
- 17. Internet Explorer에서 상태 변경 감지
- 18. 상태 표시 줄의 색 변경
- 19. 페이지의 상태 변경 메시지가 표시됩니다.
- 20. 자바 스크립트 확인란 상태 변경
- 21. 엔티티 프레임 워크와 테이블 스키마/구조체 변경
- 22. Android : 전화를받을 때 활동 상태 변경
- 23. Magento Google Checkout 새로운 주문 상태 변경
- 24. 데이터베이스에 저장된 타이머 기반 상태 변경
- 25. 로그인 후 하이퍼 링크 단추 상태 변경
- 26. ASP.NET 세션 상태 쿠키의 만기 변경
- 27. iPhone 응용 프로그램 상태 막대 속성 변경
- 28. Expression Engine : 관리자 섹션 외부에서 상태 변경
- 29. jquery를 사용하여 체크 박스 상태 변경
- 30. 일정 기간 후 PHP에서 필드 상태 변경
너무 나쁩니다. 나는 아무 방법도 없다는 느낌이 들었다. 불행하게도 우리는 컨텍스트를 제거 할 수 없으므로 실제로 옵션이 아닙니다. 지금은 제거되기 전에 수정되어야하는 객체 목록을 구현했습니다. 실제로 실제로는 큰 번거 로움과 변화가없는 것으로 표시 할 수없는 것은 너무 나쁩니다. – JohnathanKong
Entity Framework 디자인 블로그 http://blogs.msdn.com/efdesign/ : "... VisualStudio 2010 및 .NET Framework 4.0의 측면에서 제공되는 자체 추적 엔터티 아키텍처." "... 필요할 경우 (Delete() 및 SetUnchanged())이 상태를 변경하려면 각 자체 추적 엔터티에 conveience 메서드가 있습니다." EF2에서이 기능을 사용할 수있는 것 같습니다. – Tion