2011-08-10 3 views
2

Order 개체가있는 Customer 개체가 있다고 가정 해 보겠습니다. Order 개체에는 OrderDetail 개체가 있습니다.Entity Framework 4.1에서 엔터티 상태 변경

Customer oCustomer 
using(var context = new MyContext) 
{ 
oCustomer = context.Include("Order.OrderDetail").Find(1); 
} 
oCustomer.Name ="blah blah"; 
oCustomer.Order.Description = "blah blah"; 
oCustomer.Order.OrderDetail.Quantity = 10; 

는 이제 다음과 같은 고객의 상태를 변경할 때 :

using(var context = new MyContext) 
{ 
    context.Entry(oCustomer).State = EntityState.Modified. 
    context.SaveChanges(); 
} 

이는 oCustomer 객체가 아닌 oCustomer에있는 주문 및 OrderDetail을 절약 할 수 있습니다. context.Entry (oCustomer) .State = EntityState.Modified는 Order 및 OrderDetail이 아닌 oCustomer의 상태 만 변경합니다. 현재 ObjectGraph에서 각 엔티티의 상태를 수동으로 변경해야 변경 사항이 저장됩니다. 상위 엔티티 대신 전체 ObjectGraph의 상태를 변경할 수있는 방법이 있습니까? 확장 방법이나 그 밖의 다른 방법이 있습니까?

답변

4

컨텍스트와 엔터티 간의 연결을 끊으므로, 아니오. 모든 항목이 수정 된 상태에 있음을 자동으로 알 수 없습니다.

확장 메서드를 직접 만들거나 파생 된 개체 컨텍스트 클래스에 추가하여 모든 속성을 탐색하고 해당 속성이 구성에 매핑되어 있는지 확인한 다음 수정 된 개체로 설정할 수 있습니다.

연결이 끊긴 환경에서 작업한다고 가정 할 때 가장 쉬운 방법은 다른 프로세스에서 수행하지 않은 모든 변경 사항을 다시 실행하는 것입니다. db에서 엔터티를 다시로드하고 속성을 채우고 변경 내용을 저장하십시오.

+0

감사합니다. 그것은 작동! 그러나 그것은 우아한 솔루션입니까? 엔티티를 저장할 때마다 엔티티가 다시로드됩니다. – Baig

+0

엔티티에 대한 모든 정보가 있다면 새로 만들 수 있습니다. 모든 엔티티를 컨텍스트에 첨부하고 모두 수정하도록 설정 한 다음 savechanges를 호출하십시오. http://stackoverflow.com/questions/7001602/asp-net-mvc-with-ef-4-1-navigation-properties/7008849#7008849는 간단한 시나리오에서만 작동합니다. – BennyM

관련 문제