我想使用: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 到批量操作的扩展。
正如@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.'