우리는 EF STE를 한동안 사용해 왔지만 응용 프로그램이 상당히 많이 성장하여 새로운 4.1 DbContext를 고소하기로 결정했습니다. 우리의 데이터 계층은 다른 유형을 사용하지 않아도됩니다.EF 4.1 DBContext 및 탐색 속성
일을하는 DbContext 방식에 대한 초등 평가에서 나는 약간의 문제에 직면하고 있습니다.
나는 쿼리하는 데 사용하고 있고 예압 같은 관련 데이터를 필요 :
return context.Orders.Include("Detail").SingleOrDefault(ord => ord.ID == ID);
그리고 수정의 UI에 반환 된 객체를 전송하고, UI에서 돌아 왔을 때 데이터베이스에 변경 사항을 저장합니다. 내가 DbContext에서 "절약 변화"를하고, 지금까지 읽은 내용에서
쉽게 다음과 같은 코드를 사용하여 수행됩니다 :
context.Entry(order).State = EntityState.Modified;
이 코드의 문제는 실제로 객체와의 모든 속성을 표시한다는 것입니다 내 모델 (비즈니스 규칙)의 일부 속성에 허용되지 않는 항목이 수정되었습니다.
context.Orders.Attach(order);
DbEntityEntry<Order> ordEntity = context.Entry(order);
string[] arr =
{
ordEntity.Property(ord => ord.ID).Name,
ordEntity.Property(ord => ord.ClientID).Name,
};
foreach (string prop in ordEntity.OriginalValues.PropertyNames)
{
if (!arr.Contains(prop))
{
ordEntity.Property(prop).IsModified = true;
}
}
context.SaveChanges();
내가 문제를 :
나는 (! 변하지에 수정 된 속성 상태가 지원되지 않는 변경, BTW 상대적으로 작은 요구 사항에 대한 코드를 많이 요구하는 것) 다음과 같은 솔루션에 의존 이 코드에 직면하면 "Attach"문이 아무 것도 변경되지 않은 경우에도 첨부 된 객체의 탐색 속성에 일종의 충돌이 있다는 예외를 던지고 있습니다. (데이터베이스에서 검색 한 것과 똑같이 객체 저장). 오류 메시지는 다음과 유사합니다. " 'OrdersDatamodel.FK_Order_Detail'관계의 'Detail'역할에 대한 충돌이 감지되었습니다."
질문은 다음과 같습니다
- 특정 개체 속성의 수정을 방지하기위한 더 "우아한"방법이 있나요?
- 누구나 컨텍스트에 개체를 연결할 때 발생하는 예외 상황을 아는 사람이 있습니까?
감사합니다. 내가 DbContext에서 "절약 변화"를하고, 지금까지 읽은 내용에서
누구든지 도와주세요. – wassim