Estoy trabajando en una aplicación web mvc3. Cuando el usuario actualiza algo, quiero comparar los datos anteriores con el nuevo que el usuario ingresa y para cada campo que es diferente, agréguelos a un registro para crear un registro de actividades.Encontrar las diferencias entre dos entidades del mismo tipo
En este momento esto es lo que mi acción de guardar se parece a:
[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);
}
me di cuenta que podía usar esto para iterar a través de mi propiedad de oldCompLang:
var oldpropertyInfos = oldCompLang.GetType().GetProperties();
Pero esto no hace realmente ayuda, ya que solo me muestra las propiedades (Id, Name, Status ...) y no los valores de estas propiedades (1, Hello, Ready ...).
tan sólo pudiera ir por el camino difícil:
if (oldCompLang.Status != newcomplang.Status)
{
// Add to my activity log table something for this scenario
}
Pero realmente no quiero estar haciendo que para todas las propiedades del objeto.
No estoy seguro de cuál es la mejor manera de recorrer ambos objetos para encontrar discrepancias (por ejemplo, el usuario cambió el nombre o el estado ...) y crear una lista a partir de esas diferencias que puedo almacenar en otro mesa.
¡Guau, eso funciona de maravilla! ¡Gracias! – LanFeusT
Fragmento muy útil: ¡gracias! Mi – rwalter
Además, si la propiedad es una fecha y hora que usted necesita para convertir los proerties: 'si (selfValue es DateTime && toValue es DateTime) { \t \t \t \t \t \t \t \t \t DateTime de selfValue = (DateTime); DateTime to = (DateTime) toValue; if (! DateTime.Equals (from, to)) { } ' – JoeJoe87577