2011-09-12 2 views
1

RIA 서비스를 사용하여 데이터베이스에 연결된 클라이언트가있는 Entity Framework를 사용하고 있습니다. 클라이언트에서 무언가가 저장 될 때마다 영향을받는 행의 모든 ​​열이 업데이트됩니다.Entity Framework 및 RIA 서비스로 수정 된 열만 업데이트

의도적 인 동작입니까, 아니면 RIA 도메인 서비스를 통해 전파되는 변경 집합을 실제로 변경된 열만 업데이트하도록 할 수 있습니까?

답변

0

RIA 서비스 (및 해당 문제에 대한 Entity Framework)의 이전/변경 단위는 엔티티입니다.

어째서 SQL을 사용하여 비즈니스 응용 프로그램에서 전체 행을 대부분 쓸 때 변경되는 열만 업데이트하려는 이유가 무엇입니까? 일반적으로 행의 특정 열만 업데이트하려면 처리 능력/코드/시간이 더 많이 필요합니다.

좀 더 세분화 된 것을 원한다면 각 행의 속성 당 엔티티를 만들어야 할 필요가 있지만 그럴 필요가 있습니다. 당신의 목표를 명확히 할 수 있습니까? 당신의 Update<T> 방법에서

+0

RIA 용 관 속에 또 다른 못. 단일 사용자 시나리오에서만 사용하려는 경우가 아니라면 이는 쓸모가없는 것입니다. 그래도 고마워! – BowlingForGreens

+0

Entity Framework에는 구현하기가 어려운 동일한 결함이 있습니다. 자신 만의 변경 내용 추적 및 열 특정 업데이트를 RIA에 추가하는 것이 가장 좋습니다 (이렇게 할 수는 있지만 코드에 따라 결정됩니다). –

1

, 당신은

당신은 모든 업데이트 방법에 대해이 작업을 수행해야합니다 ... 다음을 수행해야합니다 그리고 당신은 특정 개체에 대한 기본 키를 기반으로 dbOriginal을 얻을해야합니다.

// change state of entity as Unmodified/Unchanged... 
original.EntityState = Unchanged; 

// this is copy form database... 
// Use different context 
MyOrderContext context = new MyOrderContext(); 
Order dbOriginal = context.Orders.First(x=>x.OrderID == original.OrderID); 

foreach(PropertyInfo p in copy.GetTypes().GetProperties()){ 
    Object originalValue = p.GetValue(dbOriginal); 
    Object newValue = p.GetValue(original); 
    if(originalValue!=null && newValue!=null 
     && originalValue.Equals(newValue)){ 
     continue; 
    } 
    // resetting this will 
    // make entity's only current 
    // property as changed 
    p.SetValue(original,originalValue); 
    p.SetValue(original,newValue); 
} 
관련 문제