2011-08-29 1 views
2

를 이용 COL 목록을 반복 열 :업데이트 엔티티 나는이 같은 LINQ를 사용하여 테이블에서 열 목록을 얻을 수 있습니다 LINQ

OrderDataContext ctx = new OrderDataContext(); 
var cols = ctx.Mapping.MappingSource 
         .GetModel(typeof(OrderDataContext)) 
         .GetMetaType(typeof(ProductInformation)) 
         .DataMembers; 

이 나에게 열 목록을 제공합니다, 그래서 나는이 작업을 수행 할 수 있습니다

foreach (var col in cols) 
{ 
    // Get the value of this column from another table 
    GetPositionForThisField(col.Name); 
} 

이 모든 것이 작동하므로 열 이름이 다른 테이블의 키이기 때문에 열 목록을 반복하고 그 열의 값을 다른 테이블에서 가져올 수 있으므로 전환 할 필요가 없습니다. .. 또는 많은 경우 ... 다음 ...

이제 질문 :

이 값을 얻은 후에 엔티티를 다시 저장하기 위해 엔티티를 채우는 방법은 무엇입니까? 나는 일반적으로 다음과 같이 갈 것 :

ProductInformation info = new ProductInformation(); 
info.SomeField1 = val1; 
info.SomeField2 = val2; 

ctx.ProductInformation.InsertOnSubmit(info); 
ctx.SubmitChanges(); 

하지만 어떻게 그 반복하면서 열을 채우기 위해 위의 같은 열 컬렉션을 사용하여, 같은 것은 존재하지 않는 경우 :

info["field1"].Value = val1; 

감사합니다.

답변

0

modofy하려는 개체를 가져 와서 속성을 설정하고 SubmitChanges를 호출하십시오. 새 오브젝트를 작성하여 삽입 할 필요가 없습니다. 컨텍스트는 변경된 속성을 추적하고 이에 따라 업데이트 문을 생성합니다. 귀하의 경우 다른 테이블에서 읽고 있기 때문에 수동이 아닌 리플렉션을 통해 속성을 설정할 수 있습니다.

0

리플렉션을 사용해야합니다. PropertyInfo을 메타 데이터에서 가져올 수 있다고 가정하면

PropertyInfo property = GetPropertyForThisField(col.Name); 
property.SetValue(info, val1, null); 
관련 문제