What does everything in this method do? (Mirror Audit in Entity Framework)

Asked

Viewed 162 times

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));
}

1 answer

2


What is Changetracker.Entries()?

Are the entities that context observed that have some change from the original database record.

What makes this line var tipoTabelaAuditoria = entidade.GetType().GetInterfaces()[0].GenericTypeArguments[0];?

This line takes the kind of TClasseAuditada declared in the implementing class IEntidade<TClasseAuditada>. For example:

public class MinhaClasse : IEntidade<MinhaClasseAuditoria> { ... }

The return would be the same as typeof(MinhaClasseAuditoria).

Here, I know he’s taking the properties of the guys in the properties, but if possible explain in a better way.

In other words, the values of each property of the table to be audited, and copying these values to the audit table.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.