변경 내용을 추적하지 않는 EntityFramework 변경 내용 추적

asp.net-core c# entity-framework entity-framework-core

문제

Entity Framework 7을 사용하고 있으며 변경 내용을 추적 할 수 있어야합니다. 나는 궁극적으로 SaveChanges에 대해 다음과 같이하고있다. 나는 base.SaveChanges ()를 사용하여 결국 그것을 오버라이드하고있다.

foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified).ToList())
{
    // For each changed record, get the audit record entries and add them
    foreach (TableChange x in GetTableChangeRecordsForChange(ent, _ChangeUser))
    {
        this.TableChanges.Add(x);
        val = true;
    }
}

이것은 궁극적으로 테이블 변경 레코드를 얻기 위해 호출합니다.

foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified).ToList())
{
    // For each changed record, get the audit record entries and add them
    foreach (TableChange x in GetTableChangeRecordsForChange(ent, _ChangeUser))
    {
        this.TableChanges.Add(x);
        val = true;
    }
}

이제 내가 직면하고있는 문제는 OriginalValue & CurrentValue와 입력 된 새로운 값입니다. 원래 값이 무엇인지 추적하지 않습니다.

나는 ~를 가지고있다:

foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified).ToList())
{
    // For each changed record, get the audit record entries and add them
    foreach (TableChange x in GetTableChangeRecordsForChange(ent, _ChangeUser))
    {
        this.TableChanges.Add(x);
        val = true;
    }
}

그러나 나는 아직도 나에게 원래 값과 현재 값을 올바르게 제공하지 못하고있다. 어떤 도움이라도 대단히 감사합니다.

수락 된 답변

그래서 나는 내 자신의 문제를 알아 냈습니다 ... 제가 직면 한 문제는 업데이트가 필요한 기록을 첨부하고 있다는 것입니다. 나는 궁극적으로 내 Update Function을 생성하여 레코드를 업데이트했다 :

public T ADMSUpdate<T>(T entity, T originalEntity)
    {
        object propertyValue = null;
        PropertyInfo[] properties = originalEntity.GetType().GetProperties();
        foreach (PropertyInfo property in properties)
        {
            propertyValue = null;
            if (null != property.GetSetMethod())
            {
                PropertyInfo entityProperty = entity.GetType().GetProperty(property.Name);
                propertyValue = entity.GetType().GetProperty(property.Name).GetValue(entity, null);

                if (null != propertyValue)
                {
                    property.SetValue(originalEntity, propertyValue, null);
                }
            }
        }
        return entity;
    }



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.