2011-09-27 7 views
2

엔티티 프레임 워크를 사용하고 있습니다.엔티티의 속성 목록 가져 오기

개체의 EntityState가 "Added"일 때 엔티티의 속성 목록을 얻고 싶습니다.

여기는 내가하는 일의 샘플 코드입니다.

var newEntities = ObjectStateManager.GetObjectStateEntries(EntityState.Added); 
foreach (var entry in newEntities) 
{ 
    var entityName = entry.EntitySet.Name; 
    var newProps = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).GetModifiedProperties(); 
    var currentNewValues = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).CurrentValues; 

    foreach (var propName in newProps) 
    { 
     var newValue = currentNewValues[propName]; 
    } 
} 

당신이 볼 수 있듯이, 내가 사용하는

ObjectStateManager.GetObjectStateEntry (entry.EntityKey) .GetModifiedProperties();

속성 목록을 가져 오지 만 상태가 EntityState.Modified 인 경우에만 작동합니다.

감사합니다. 여기

그와

내 요구를 수행 할 수있는 방법이다, 나는 개체의 모든 속성을 얻고도 자신의 가치를 얻을 수 있습니다.

var newEntities = ObjectStateManager.GetObjectStateEntries(EntityState.Added); 
foreach (var entry in newEntities) 
{ 
     if (entry.State == EntityState.Added) 
     { 
      var prop = entry.Entity.GetType().GetProperties(); 
      var entityName = entry.EntitySet.Name; 

      var currentNewValues = ObjectStateManager.GetObjectStateEntry(entry.EntityKey).CurrentValues; 
      foreach (var propName in prop.Where(p => p.PropertyType.Namespace == "System")) 
      { 
       var newValue = currentNewValues[propName.Name]; 
      } 
     } 
} 
+0

어떤 속성을 원하십니까? 엔티티 클래스의 모든 (모든 값) 속성의 목록? –

+0

난 속성 (예 : "EntityObject, EntityReference")과 같은 엔티티 클래스가 아닌 int32, string, bool 등의 속성 만 원할뿐입니다. 그런 다음이 속성에 대한 가치를 얻으십시오. 만약 엔티티 연락처가 있다면, ContactID, ContactName 등을 얻고 싶습니다 ... –

+0

더 명확히하기 위해 엔티티 클래스의 속성 (즉, 테이블 열의 이름) 만 리턴하는 메소드가 필요합니다. –

답변

0
foreach (var entry in newEntities) 
{ 
    if (entry.State == EntityState.Added) 
    { 
     // continue and get property list 
     var currentValues = entry.CurrentValues; 
     for (var i = 0; i < currentValues.FieldCount; i++) 
     { 
      var fName = currentValues.DataRecordInfo.FieldMetadata[i].FieldType.Name; 
      var fCurrVal = currentValues[i]; 
     } 
    } 
} 
0

당신이 EntityState 인 '주'속성이 있어야합니다 이상 열거하는 각 항목, 그래서 당신은 그들을 필터링 할 수 있습니다 경우 절 또는 사용 LINQ,

 foreach (var entry in newEntities) 
     { 
      if (entry.State == EntityState.Added) 
      { 
        // continue and get property list 
      } 
     } 

또는

 var addedEntities = newEntities.Where(x => x.State == EntityState.Added); 

또한 '수정 된 속성'을보아야하는지 잘 모르겠습니다. 단지 추가 된 엔티티 인 경우 왜 새로운 속성 (즉, CurrentValues)이 아닌 모든 수정 된 속성을 갖습니까?

+0

네, 이것이 제 문제입니다. 나는 특성의 목록을 얻는 방법을 모른다. "수정 된 속성"수정 된 속성 목록을 반환하고이 컨텍스트에서 내 속성 목록을 가져 오는 적절한 방법이 아닙니다. 이 목록을 얻는 방법. ? –

+0

정확히 달성하려는 것은 무엇입니까? .GetCurrentValues ​​() 메서드 만 사용하면됩니다. msdn 설명서에 따르면 GetModifiedProperties()는 SaveChanges()가 마지막으로 호출 된 이후에 변경된 개체 속성의 이름을 반환합니다. 마지막으로 SaveChanges()가 존재하지 않는 새로운 엔티티가 호출되면 수정 된 속성이 없습니다. –