asp.net MVC 응용 프로그램에서 낙관적 잠금을 구현하려고하고 감사 추적 기능을 제공하려고합니다.linq datacontext 첨부 시나리오의 GetModifiedMembers
감사 프레임 워크는 SubmitChanges 중에 DataContext.GetModifiedMembers를 호출 할 수 있어야합니다. 이는 좋은 생각입니다.
낙관적 잠금은 ROWVERSION 시간 소인을 사용하여 base64로 일련 화되고 뷰의 숨겨진 필드에 놓입니다.
내 편집 작업은 다음과 같습니다
[AcceptVerb(HttpVerb.Post)]
public ActionResult Edit(MyType myType)
{
context.MyTypes.Attach(myType, true);
context.SubmitChanges(ConflictMode.FailOnFirstConflict);
}
이 일의 DataContext.GetModifiedMembers는 항상 데이터베이스 사이에 변경 한 값이 제공됩니다 단지 사람보다는합니다 MyType에 대한 모든 속성을 반환합니다 , 감사가 중단됩니다. 특히 모든 속성을 새 값에서 새 값으로 변경 한 것으로 반환하므로 목록에 영리한 기능을 수행 할 수 없습니다.
개체를 연결하기 전에 개체를 먼저로드하려고 시도했지만 중복 키 예외가 발생합니다. 그때 UpdateModel를 사용하여 시도
, 즉
[AcceptVerb(HttpVerb.Post)]
public ActionResult Edit(int id, FormCollection col)
{
var mt = context.MyTypes.Single(mt => mt.id = id);
UpdateModel(mt);
context.SubmitChanges(ConflictMode.FailOnFirstConflict);
}
이 감사와 함께 작동하지만 낙관적 잠금을 실패합니다. UpdateModel이 concurrentTS 필드를 변경하기 때문에 ChangeConflictException 대신 InvalidOperationException이 발생합니다 (이는 분명히 읽기 전용입니다).
내가 뭘 잘못하고 있니?