Audit.Net при обновлении вставляет пустые записи для каждого значения в таблице - PullRequest
0 голосов
/ 27 февраля 2019

Я использую поставщика данных Audit.Net EntityFramework.Это моя конфигурация в Startup.cs

 Audit.Core.Configuration.Setup().UseEntityFramework(_ => _.AuditTypeMapper(t => typeof(AuditLog)).AuditEntityAction<AuditLog>((ev, entry, entity) =>
    {
        entity.AuditData = entry.ToJson();
        entity.AuditDate = DateTime.Now;
        entity.AuditUser = Environment.UserName;
        // entity.AuditUsername = Environment.MachineName;
        entity.AuditUsername = HttpContext.Current.User.Identity.Name;
    })
.IgnoreMatchedProperties(true));

Это DBContext

public class P121DbContext : Audit.EntityFramework.AuditDbContext, IDbContext
{
    public P121DbContext()
        : base("P121DbContext")
    {
        Database.SetInitializer<P121DbContext>(null);
    }

    public Database GetDatabase()
    {
        return this.Database;
    }

    public new DbEntityEntry<T> Entry<T>(T entity) where T : class
    {
        return (new P121DbContext().Entry(entity) as DbEntityEntry<T>);
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

    #region Entities

    public DbSet<Activity> Activities { get; set; }
    public DbSet<ActivitySource> ActivitySources { get; set; }

    public DbSet<Client> Clients { get; set; }
    public DbSet<ClientOperator> ClientOperators { get; set; }
    public DbSet<Contact> Contacts { get; set; }

    public DbSet<ActionSource> ActionSources { get; set; }
    public DbSet<DeliveryAction> DeliveryAction { get; set; }

    public DbSet<Exclusion> Exclusions { get; set; }

    //public DbSet<CompanyDetails> CompanyDetails { get; set; }
    public DbSet<DeliveryActions> DeliveryActions { get; set; }
    public DbSet<Fan> Fans { get; set; }
    public DbSet<FanActivity> FanActivities { get; set; }
    public DbSet<FanStatus> FanStatuses { get; set; }
    public DbSet<FanEmailResponseStatus> EmailResponsStatuses { get; set; }

    public DbSet<Batch> Batches { get; set; }
    public DbSet<LinkedInProfile> LinkedInProfiles { get; set; }
    //public DbSet<ProfileDetails> ProfileDetails { get; set; }
    public DbSet<ProfileFan> ProfileFans { get; set; }
    public DbSet<SavedSearchParameters> SavedSearchParameters { get; set; }

    public DbSet<Message> Messages { get; set; }

    public DbSet<LinkedInAccount> LinkedInAccounts { get; set; }
    //public DbSet<SocialNetProfile> SocialNetProfiles { get; set; }
    public DbSet<SocialReportLinkedIn> SocialReportsLinkedIn { get; set; }

    public DbSet<Tag> Tags { get; set; }
    public DbSet<TagFan> TagFans { get; set; }
    public DbSet<TagLinkedInProfile> TagLinkedInProfile { get; set; }

    public DbSet<AuditLog> AuditLog { get; set; }



    #endregion Entities
}

}

Проблема возникает только тогда, когда я изменяю значение в форме или в форме данных

AuditLog

Выделена обновленная ревиз.Все ниже добавлено, и кажется, что это входит в какую-то рекурсию, так как первая запись Json после Rec Rec Update имеет 1281 символов, второй 1146, третий 1763, 4-й 2773 и так далее, пока я не остановлю проект.

при entity.AuditData = entry.ToJson(); получении этого

System.OutOfMemoryException: 'Exception of type 'System.OutOfMemoryException' was thrown.'

В чем может быть проблема?

1 Ответ

0 голосов
/ 27 февраля 2019

Если вы вносите изменения в AuditLog DbSet непосредственно из проверенного DbContext, вы должны пометить сущность AuditLog как не подлежащую аудиту, чтобы изменения не были приняты библиотекой аудита.

Этоэто можно сделать, указав класс [AuditIgnore], например:

[AuditIgnore]
public class AuditLog
{
    ...
}

или с помощью конфигурации:

Audit.EntityFramework.Configuration.Setup()
    .ForContext<P121DbContext>()
    .UseOptOut()
    .Ignore<AuditLog>();
...