2010-09-28 7 views
5

ASP.NET MVC 및 Entity Framework를 사용하고 있습니다. 사람의 필드를 편집 할 수있는 사람 편집 웹 페이지가 있고, 다시 게시 작업에서 다음 코드를 사용합니다.ASP.NET MVC 및 Entity Framework에서 변경되지 않은 값 업데이트 방지

var person = objectCtx.Persons.Where(s => s.Id == id).FirstOrDefault(); 
TryUpdateModel(person, form.ToValueProvider()); 
objectCtx.SaveChanges(); 

위대한 작품입니다. 그러나 생성 된 SQL에서 값이 변경되지 않은 경우에도 여전히 UPDATE 문을 볼 수 있습니다. ASP.NET MVC 또는 Entity Framework에서이를 피할 수있는 방법이 있습니까?

답변

0

정보가 동일하면 SaveChanges()으로 전화하지 않아도됩니다.

+0

그러나 모든 정보가 동일하지는 않습니다. 사용자는 onle 필드 만 변경할 수 있지만 Entity Framework는 SQL의 모든 필드를 업데이트하려고합니다. – Hengyi

+1

@Ian 그리고 같은 데이터 인 경우 문제가되는 이유는 무엇입니까? – msarchet

+0

페이지에 여러 개의 하위 항목이있을 수 있습니다. 예 : Person 엔터티 및 Person.Address 자식 엔터티. 사용자가 Person 엔터티의 필드 만 업데이트하는 경우 Person.Address 엔터티를 업데이트하지 않아야한다고 생각하면됩니다. – Hengyi

3

음, 속성을 할당하면 Entity Framework는 사용자가 수행중인 작업을 알고 업데이트한다고 가정합니다. 사용자가 하나의 필드 만 변경했다는 것을 말하고 있지만 MVC 또는 Entity Framework에서 게시 된 HTML 양식의 모든 키 값 쌍 중에서 사용자가 실제로 변경 한 필드가 하나임을 알고 있다고 생각합니다. . 귀하는 귀하의 질문에 "가치가 변하지 않았습니다"라고 말하고 있지만, 귀하는 @ jchapa의 답변에 대한 귀하의 의견에서 "모든 정보가 동일하지 않다"고 말합니다. 이것은 실제 문제가 Entity Framework에서 수행하는 작업이 아니라 작업자가 수행 할 작업과 관련이 있음을 나타냅니다.

아마도 나는 잘못된 장소에서 해결책을 찾고 있다고 생각합니다.

실제 문제는 액션에 전달 된 모델에 사용자가 변경할 수 없으며 업데이트하지 않아야한다는 것입니다 (실제 양식에 없기 때문에). 그러면 허용 된 사이트 목록을 전달할 수 있습니다 TryUpdateModel.

실제 문제는 다른 사용자가 양식에 대한 GET 요청을 발행 한 시간과 사용자가 변경 사항을 게시 한 시간 사이에 Person 인스턴스를 변경 한 경우 테이블에 TIMESTAMP 필드를 추가 할 수 있고 그것에 고정 된 동시성 모드를 설정하십시오.

관련 문제