BULK 方法抛出“无法将 NULL 值插入列”EF 扩展

问题描述 投票:0回答:1

我想使用:https://entityframework-extensions.net/bulk-extensions 但在处理过程中我收到错误: 无法将 NULL 值插入到“XXX”表的“XXX”列中;列不允许为空。 确实如此,但我已根据需要使用此列 makred 配置了 dbcontext:

            builder.Property(x => x.XXX)
                .HasColumnName("XXX")
                .IsRequired();

使用的方法是这样的

            await ImportDbContext.Set<ENTITY>()
                .BulkSynchronizeAsync(ENTITY, options =>
            {
                options.ColumnPrimaryKeyExpression = entity => entity .XXX;
                options.SynchronizeKeepidentity = true;
            });

在日志中,我看到扩展创建自己的缓存表,其中该列被标记为可能为空...所以这个问题很可能就在这里,扩展无法识别该列应该为非空... 我有 DbFirst 方法。

请帮助我解决这个问题,或者也许有更好的 EF 到批量操作的扩展。

c# .net entity-framework
1个回答
0
投票

正如@DenisMicheal.k 在评论部分写道:

如果您的属性

XXX
的值之一为 null,则会发生此错误。

例如,使用 EF Core 中的 BulkSynchronize 以及数据库中标记为 ColumnString

NOT NULL
 将导致相同的错误:

using (var context = new EntityContext()) { List<EntitySimple> list = new List<EntitySimple>(); list.Add(new EntitySimple { ColumnInt = 1, ColumnString = "a" }); list.Add(new EntitySimple { ColumnInt = 2 }); context.BulkSynchronize(list, options => options.ColumnPrimaryKeyExpression = x => x.ColumnString); }
第一个实体可以插入,但第二个实体的 

NULL

ColumnString
,导致以下异常:

Cannot insert the value NULL into column 'ColumnString', table 'LabEFECore70.dbo.EntitySimples'; column does not allow nulls. UPDATE fails.'
    
© www.soinside.com 2019 - 2024. All rights reserved.