У меня есть логи 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?