Encontre diferenças entre duas entidades do mesmo tipo
Estou trabalhando em um aplicativo da web mvc3. Quando o usuário atualiza algo, desejo comparar os dados antigos com os novos que o usuário está inserindo e, para cada campo diferente, adicioná-los a um log para criar um log de atividades.
gora, é assim que minha ação de salvamento se parece:
[HttpPost]
public RedirectToRouteResult SaveSingleEdit(CompLang newcomplang)
{
var oldCompLang = _db.CompLangs.First(x => x.Id == newcomplang.Id);
_db.CompLangs.Attach(oldCompLang);
newcomplang.LastUpdate = DateTime.Today;
_db.CompLangs.ApplyCurrentValues(newcomplang);
_db.SaveChanges();
var comp = _db.CompLangs.First(x => x.Id == newcomplang.Id);
return RedirectToAction("ViewSingleEdit", comp);
}
Descobri que eu poderia usar isso para percorrer minha propriedade de oldCompLang:
var oldpropertyInfos = oldCompLang.GetType().GetProperties();
Mas isso realmente não ajuda, pois mostra apenas as propriedades (Id, Nome, Status ...) e não os valores dessas propriedades (1, Olá, Pronto ...
Eu poderia simplesmente seguir o caminho mais difícil:
if (oldCompLang.Status != newcomplang.Status)
{
// Add to my activity log table something for this scenario
}
Mas eu realmente não quero fazer isso para todas as propriedades do objet
Não tenho certeza de qual é a melhor maneira de percorrer os dois objetos para encontrar diferenças (por exemplo, o usuário alterou o nome ou o status ...) e crie uma lista dessas diferenças que posso armazenar em outra tabel