2
Well, following this excellent reply of the Gypsy, where he implements a form of Auditoria Espelho, where it is implemented in the DbSaveChanges()
the following method:
//Laço de repetição em ChangeTracker.Entries. Mas o que é ele?
foreach (var entidade in ChangeTracker.Entries())
{
// ** É possível explicar de forma sucinta o que está acontecendo aqui?
var tipoTabelaAuditoria = entidade.GetType().GetInterfaces()[0].GenericTypeArguments[0];
var registroTabelaAuditoria = Activator.CreateInstance(tipoTabelaAuditoria);
// Isto aqui é lento, mas serve como exemplo.
// Depois procure trocar por FastMember ou alguma outra estratégia de cópia.
// ** E aqui ?
foreach (var propriedade in entidade.GetType().GetProperties())
{
registroTabelaAuditoria.GetType()
.GetProperty(propriedade.Name)
.SetValue(registroTabelaAuditoria, entidade.GetType().GetProperty(propriedade.Name).GetValue(entidade, null));
}
/* Salve aqui usuário e data */
this.Set(registroTabelaAuditoria.GetType()).Add(registroTabelaAuditoria);
Well, I left comments in the code where I feel doubts, but I leave here some questions in order to further objectify the question.
What is ChangeTracker.Entries()
?
What makes this line var tipoTabelaAuditoria = entidade.GetType().GetInterfaces()[0].GenericTypeArguments[0];
?
Here, I know he’s taking the properties of the guys in the properties, but if possible explain in a better way.
foreach (var propriedade in entidade.GetType().GetProperties())
{
registroTabelaAuditoria.GetType()
.GetProperty(propriedade.Name)
.SetValue(registroTabelaAuditoria, entidade.GetType().GetProperty(propriedade.Name).GetValue(entidade, null));
}