뷰를 테이블로 변환하고 변경 내용을 저장하면 낙관적 동시성 예외가 발생합니다.

StackOverflow https://stackoverflow.com//questions/10689972

문제

저는 Entity Framework 4(자체 추적 엔터티 사용)로 작업하고 있으며 두 테이블의 병합인 뷰에 액세스하고 있습니다.따라서 뷰의 정보를 업데이트할 때 뷰의 STE를 데이터베이스에 액세스하는 저장소로 보냅니다.

나는 다음을 수행했습니다.

업데이트된 정보가 포함된 뷰를 받으면 STE1과 STE2를 생성합니다.STE를 생성할 때 이것이 추가된 상태로 생성되는 방법입니다.따라서 상태가 수정된 뷰의 STE 상태를 어떻게 알 수 있으며 다음 메서드를 사용하여 두 STE의 상태를 변경합니다. MarkedAsModified.

그런 다음 뷰의 STE에 두 테이블의 정보를 가지고 뷰의 정보를 올바른 STE로 전달하고 STE의 변경 사항을 objectContext.

마지막으로 나는 saveChanges.하지만 이 단계에서 나는 Optimistic concurrency exception.제 생각에는 STE가 주에서 다음으로 넘어가기 때문인 것 같습니다. Added 에게 Modified 따라서 컨텍스트는 생성과 생성 사이에 일부 수정이 있음을 감지합니다. SaveChanges, 하지만 나도 노력하려고 노력해요 AcceptChanges STE에서 나중에 수정된 것으로 표시되고 변경 사항을 적용하고 마지막으로 SaveChanges, 그러나 문제는 지속됩니다.

문제를 어떻게 해결할 수 있나요?뷰와 Entity Framework v4를 사용하여 작업하는 더 좋은 방법이 있습니까?

감사해요.다임록.

편집 1:여전히 문제가 있습니다.내 코드는 다음과 같습니다

구성 요소 myComponent = 새 구성 요소();// 이것은 Ste MyComponent.ReReference = MyView.reference입니다....// 기타 속성 myComponent.markedAmsOdified ();//정보를 업데이트하고 싶기 때문에 필요합니다. 새 레지스터를 추가하지 마세요.myContext.ApplyChanges("Components", myComponent);miContexto.SaveChanges();

saveChanges에서 예외가 발생합니다.업데이트, 삽입 또는 삭제 문이 예상치 못한 행 수(0)에 영향을 미쳤습니다.엔터티가 로드된 이후 엔터티가 수정되거나 삭제되었을 수 있습니다.ObjectStateManager 항목을 새로 고칩니다.

어느 것이 문제입니까?새로 생성된 STE를 수정할 수 없나요?

감사해요.

도움이 되었습니까?

해결책

문제를 해결하는 방법을 찾았습니다.

첫 번째 솔루션에서는 데이터베이스에 쿼리를 작성하여 데이터베이스의 기존 레지스터를 가져오는 것이 해결 방법이었습니다.이렇게 하면 컨텍스트에 엔터티가 추가되고 데이터를 수정하고 변경 사항을 올바르게 저장할 수 있습니다.

그러나 나중에 컨텍스트에 수정된 엔터티를 추가하기 위해 쿼리를 데이터베이스로 만들 필요가 없는 방법을 찾았습니다.

방법은 다음 코드를 사용하는 것입니다.

Customers myCustomer = new Customers  { IDCustomer = myCustomer.IDCustomer };
myContext.Customers.Attach(myCustomer);

//update the data of the entity.

myContext.SaveChanges();

해결책은 기본 키를 설정하는 새 엔터티를 만드는 것입니다.엔터티가 FK를 보유하는 경우 동일한 방식으로 표시됩니다.이 시점에서 엔터티는 추가된 상태를 갖습니다.

나중에 컨텍스트에 첨부된 다음 수정할 수 있습니다.필드가 변경되면 엔터티의 상태가 수정됨으로 변경되므로 saveChanges()가 호출되면 EF는 엔터티를 업데이트하고 새 엔터티를 추가하려고 시도하지 않습니다.

나는 이 정보를 여기에서 찾았다. 링크.이 게시물의 해결책은 엔터티를 데이터베이스로 검색하지 않고 삭제하는 것입니다. 기존 레지스터를 수정하려는 경우에도 아이디어가 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top