Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Adrian Diaz Diaz
    @adriandzdz1
    image.png
    y después en el contexto lo capturo de la siguiente forma
    image.png
    Pero quería consultar, si AuditScope es por global ? Que pasa cuando existe la concurrencia de varios usuarios?
    Federico Daniel Colombo
    @thepirat000
    Está mal que llames al AddCustomAction cada vez que se ejecuta una acción. Deberías llamarlo sólo 1 una vez. Los Custom Actions son globales, los audit scopes no
    Federico Daniel Colombo
    @thepirat000
    entonces la acción se va a ejecutar tantas veces como hayas llamado al AddCustomAction desde que inició tu aplicación
    Adrian Diaz Diaz
    @adriandzdz1
    Gracias por la respuesta.
    Sergio Vega
    @sergiovega95
    buenas tardes federico
    imagen.png
    tengo el siguiente problema que se me viene presentando, al momento de auditar una entidad , la cual en este caso esta en el TramitesContext
    me sirve perfectamente en inserción y pude parsear el json y obtener los datos correctamente
    Sergio Vega
    @sergiovega95
    pero me sucede (no en todos los casos), que genero una actualizacón sobre un campo de alguna entidad , y en el json que se guarda en la base de datos
    Sergio Vega
    @sergiovega95
    para la parte que muestra los cambios en el json "Changes" me aparece en el json que el valor original es igual al valor nuevo (los dos valores los muestra iguales y con el valor del nuevo campo)
    "Changes":[{"ColumnName":"AreaId","OriginalValue":99,"NewValue":99},{"ColumnName":"CodigoClase","OriginalValue":7781,"NewValue":7781}
    osea no es capaz de solo mostrar los campós que cambiarón ya que en este caso solo cambió uno , pero se muestra como si todos hubieran cambiado
    tomando como valor antiguo el valor nuevo
    solo me pasa con algunos updates , en otro casos los cambios se muestran perfectamente y guardando en el json unicamente los campos que fueron afectados
    espero su ayuda muchas gracias por su trabajo
    en la imagen abjunto la configuración que tengo
    Sergio Vega
    @sergiovega95
    nota estoy utilizando la versión 14.5.0 de audit entity framework core y la 14.5.2.0 del sqlserver provider, no estoy utilizando la versión mas actualizada debido a que no puedo migrar mi app de .net core 2.1 a 2.2 por orden del area de software de la empresa
    Federico Daniel Colombo
    @thepirat000
    Eso sucede por cómo EF trata los updates.. depende cómo estés haciendo el update, si no acabas de hacer un SELECT previo al update, no hay forma de que EF sepa qué cambió, entonces solo manda un UPDATE a la base de datos de todos los campos. Puedes ver estos Issues similares: https://github.com/thepirat000/Audit.NET/issues/53#issuecomment-315434618 y thepirat000/Audit.NET#167
    tienes que cambiar la forma que haces el update, si es que quieres ver el old value...
    otra cosa que veo... no es correcto ejecutar la configuración AddCustomAction ni el seteo del DataProvider dentro del contructor del DbContext
    eso funcionaría sólo si tu DbContext es un singletón, lo cual no creo que sea así, ni tampoco está recomendado... toda esa configuración (la obtención del httpContext, el custom action y el seteo del data provider debería hacerse en el StartUp de tu aplicación, y ejecutarse una única vez
    supongo que es Asp.Net Core
    Federico Daniel Colombo
    @thepirat000
    Algo así:
    using Audit.Core;
    
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHttpContextAccessor();
            // ...
        }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHttpContextAccessor ctxAccessor)
        {
            Audit.Core.Configuration.Setup()
                .UseSqlServer(_ => _
                    .ConnectionString("...")
                    .Schema("dbo")
                    .TableName("Event")
                    .IdColumnName("EventId")
                    .JsonColumnName("JsonData")
                    .CustomColumn("UserModify", ev => ev.CustomFields["UserModify"])
                    .CustomColumn("AuditDate", ev => DateTime.Now));
    
            // Usar ActionType.OnScopeCreated así solo se llama una única vez por audit event
            Audit.Core.Configuration.AddCustomAction(ActionType.OnScopeCreated, scope =>
            {
                var usuario = ctxAccessor.HttpContext.User.Identity.Name ?? ctxAccessor.HttpContext.Session.GetString("UsuarioSesion");
                scope.SetCustomField("UserModify", usuario);
            });
    
            // ...
        }
    }
    también te recomiendo agregar un custom field con el TraceIdentifier de Asp.NET muy útil si quisieras luego agrupar los logs por request (por ejemplo si un mismo request dispara más de una operación en la base de datos, las podrás agrupar por ese ID único por request
    scope.SetCustomField("TraceIdentifier", ctxAccessor.HttpContext.TraceIdentifier);
    Sergio Vega
    @sergiovega95
    muchisimas gracias , excelente trabajo y soporte por tu parte
    Sergio Vega
    @sergiovega95
    Buenas Federico
    image.png
    Sergio Vega
    @sergiovega95
    Realice los cambios que dijiste y perfecto , pero para el caso de que se duplican los datos en el "valor nuevo" y "valor antiguo" en la auditoria se arregló a medias . ahora realize un select del registro que voy a actualizar antes de editar algunos de sus campos tal cual como lo recomendaste y perfecto, ahora me salen los valores antiguos y nuevos para el campo que edite en particular , pero siguen apareciendo los valores antiguos igual a los valores nuevos para los campos que no cambiaron(cuando estos no deberían aparecer), continuaré buscando la forma en que estos no aparezca , si conoces una forma de guardar particular que no suceda esto se lo agradeceria. Muchas gracias por tu apoyo
    Dennis Hernández
    @djhvscf

    Hola, estoy teniendo un problema con Audit.Net corriendo en un app .net framework 4.7.2

    System.InvalidOperationException: 'The entity type AuditLog is not part of the model for the current context.'

    AuditLog hace referencia a la tabla donde quiero guardar los logs en sql server
    Federico Daniel Colombo
    @thepirat000
    Hola
    Tu DbContext tiene un DbSet<AuditLog> como propiedad?
    pudiera ser que te faltara eso... public DbSet<AuditLog> AuditLog { get; set; }
    Si no necesitas exponerlo como propiedad pública, la puedes poner como privada. Al parecer es necesario para que entity framework la reconozca como entidad
    Dennis Hernández
    @djhvscf
    EF code first es la forma configurada del app. Para registrar los entities se utiliza modelBuilder.Configurations.AddFromAssembly(this.GetType().Assembly);
    Federico Daniel Colombo
    @thepirat000
    te respondí también en el issue de github, podrías compartir el código mínimo para reproducirlo? tu DbContext, la clase AuditLog y la configuración? la entidad auditlog está definida en el mismo assembly que las demás entidades?
    intentaste agregando la propiedad que te mencioné en tu DbContext?
    Dennis Hernández
    @djhvscf
    Ya te respondí Federico. Te agradezco el seguimiento
    ferminbabel
    @ferminbabel
    Hola, cual seria la manera correcta de deshabilitar la columna JsonColumnName para que no guarde datos?
    Ya guardo los datos en otras columnas (CustomColumns) por lo que la informacion se repite
    Federico Daniel Colombo
    @thepirat000
    te refieres al data provider de Audit.NET.SqlServer ?
    puedes dejar o setear el JsonColumnNameBuilder a NULL
    y se ignoraría
    ferminbabel
    @ferminbabel
    me refiero al Audit.NET.MySQLServer
    ferminbabel
    @ferminbabel
    me ha funcionado poniendo la propiedad JsonColumnName = null
    muchas gracias!!