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

questionAnswers(5)

yourAnswerToTheQuestion