Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EFCore 3插入大实体,Audit.net抛出内存不足异常_C#_Entity Framework_Audit.net - Fatal编程技术网

C# EFCore 3插入大实体,Audit.net抛出内存不足异常

C# EFCore 3插入大实体,Audit.net抛出内存不足异常,c#,entity-framework,audit.net,C#,Entity Framework,Audit.net,我有一些逻辑,可以根据开始和结束日期创建一组记录。创建这些实体时,会将它们添加到其父实体的集合中。不用说,这可以很容易地从几个实体的总数爆炸到几百个,很容易地爆炸到数千个 我最初的逻辑是JU在我的循环逻辑中旋转,创建实体并将它们添加到其父对象的集合中。因此,我的保存是一个呼叫,即: _context.Parent.Add(Parent); _context.SaveChanges(); 在我的测试中,父实体在其所有集合中可能有1400个实体(父实体、子实体、孙子实体和曾孙实体)。EF上的sav

我有一些逻辑,可以根据开始和结束日期创建一组记录。创建这些实体时,会将它们添加到其父实体的集合中。不用说,这可以很容易地从几个实体的总数爆炸到几百个,很容易地爆炸到数千个

我最初的逻辑是JU在我的循环逻辑中旋转,创建实体并将它们添加到其父对象的集合中。因此,我的保存是一个呼叫,即:

_context.Parent.Add(Parent);
_context.SaveChanges();
在我的测试中,父实体在其所有集合中可能有1400个实体(父实体、子实体、孙子实体和曾孙实体)。EF上的save按预期工作

当Audit.Net尝试为AuditEvent.ToJson写入Json时,会引发内存不足异常。这是有问题的一行entity.AuditData=ev.ToJson()这需要大约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);

            });
Audit.Core.Configuration.Setup()
.UseEntityFramework(ef=>
{
ef.UseDbContext();
ef.AuditTypeMapper(t=>typeof(EntityAuditLog))
.审计实体行动(
(ev、条目、实体)=>
{
entity.AuditData=ev.ToJson();
entity.EntityType=entry.EntityType?.Name;
entity.AuditDate=DateTimeOffset.UtcNow;
entity.AuditAction=entry.Action;
})
.IgnoreMatchedProperties(真);
});
我所做的是将逻辑和_context.SaveChanges()分解成更小的块

我很好奇Audit.Net中是否有更多我错过的配置?
或者,在使用Audit.Net构建具有大型集合的实体时,我应该注意的一种策略?

插入许多元素总是需要很长时间。每个项目都是一个SQL命令。试试看,我来看看。我不知道大容量插入完成了整个图形。不过,EF的持久性并不是问题所在。它的Audit.Net生成AuditEvent数据。你知道批量插入和Audit.Net是否一起工作吗?我不这么认为,至少你必须访问DbSet.Add或AddRange位置。不允许您再使用它。您可能不仅序列化了新对象,而且序列化了包含它们的父对象,包括它们的所有子对象。你能分享更多关于你的模型的细节吗?