EFCore 3 вставляет большой объект, Audit. net выбрасывает исключение памяти - PullRequest
2 голосов
/ 07 января 2020

У меня есть логи c, которые создают кучу записей на основе даты начала и окончания. При создании этих сущностей они добавляются в коллекцию своих родительских сущностей. Само собой разумеется, это может легко взорваться от нескольких сущностей до нескольких сотен, легко превратиться в тысячи.

Мой первоначальный лог c был просто вращаться через мой l oop лог c, создавая юридические лица и добавление их в коллекцию своих родителей. Таким образом, мое сохранение было одним вызовом, а именно:

_context.Parent.Add(Parent);
_context.SaveChanges();

в моем тестировании, сущность Parent могла иметь 1400 возможных сущностей во всех своих коллекциях (родитель, ребенок, внук и правнук). лица). Сохранение в EF работает должным образом.

Проблема возникает, когда Audit. Net пытается записать Json для AuditEvent. Для Json он выбрасывает из памяти исключение . это неправильная строка entity.AuditData = ev.To Json (); , которая занимает около 10 минут, чтобы всплыть до начала, где обнаружена ошибка. Постоянство уже произошло в БД для всех сущностей, которые нужно было сохранить.

Audit.Core.Configuration.Setup()
            .UseEntityFramework(ef =>
            {
                ef.UseDbContext<LogDbContext>();
                ef.AuditTypeMapper(t => typeof(EntityAuditLog))
                .AuditEntityAction<EntityAuditLog>(
                        (ev, entry, entity) =>
                        {
                            entity.AuditData = ev.ToJson();
                            entity.EntityType = entry.EntityType?.Name;
                            entity.AuditDate = DateTimeOffset.UtcNow;
                            entity.AuditAction = entry.Action;                            
                        })
                .IgnoreMatchedProperties(true);

            });

Что я сделал, чтобы обойти это, так это разбил logi c и _context.SaveChanges () на более мелкие куски.

Мне любопытно, есть ли в Audit другие конфигурации. Net, которые я пропустил? Или стратегия при создании сущностей с большими коллекциями, о которых я должен знать при использовании Audit. Net?

...