7

내 DbContext 하위 클래스에 일반 감사 코드를 작성하려고합니다.Entity Framework 변경 추적 API 및 참조 항목

foreach (var entry in this.ChangeTracker.Entries<MyClass>()) 
{ 
    if (entry.State == EntityState.Modified) 
    { 
     var entityProperties = entry.Entity.GetType().GetProperties(); 
     foreach (var entityProperty in entityProperties) 
     { 
      DbMemberEntry propertyEntry = entry.Member(property.Name); 
      if (propertyEntry is DbPropertyEntry) 
      { 
       // IsModified available 
      } 
      else if (propertyEntry is DbReferenceEntry) 
      { 
       // IsModified not available 
      } 
     } 
    } 
} 

1) 참조 속성 만 변경하는 경우 entry.State 값은 "변경되지 않음"입니다.

2) 포인트 1이 "Modified"로 설정되어 있어도 DbReferenceEntry 클래스에는 IsModified 속성이나 원래 값이없는 것 같습니다.

EF가이를 추적해야하기 때문에 가능하다고 생각합니다.

아무도 도와 줄 수 있습니까?

감사합니다, 벤

답변

6

예 참조 항목 (탐색 속성) 추적하지 않습니다 변경됩니다. 외래 키의 책임 (외래 키 조합의 경우) 또는 독립된 단체의 개체 추적 변경. ObjectContext API에서 이러한 개체를 ObjectStateManager까지 가져올 수 있지만 DbContext API에는이 개체가 없습니다. 나는 이것에 관한 질문을 MSDN Forum에 물었다.