Well, following this great Gypsy answer , where he implements a Mirror Audit , where the following method is implemented in DbSaveChanges()
:
//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 in comments in the code where I have questions, but I leave here some questions in order to objectify the question further.
What is ChangeTracker.Entries()
?
What does this line var tipoTabelaAuditoria = entidade.GetType().GetInterfaces()[0].GenericTypeArguments[0];
?
Here, I know that it is taking the properties of the types 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));
}