- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 EF 核心批量扩展的批量插入时收到以下错误:
Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index') at System.Collections.Generic.List
1.get_Item(Int32 index) at
1 entities, IList
EFCore.BulkExtensions.TableInfo.UpdateEntitiesIdentity[T](IList1 entitiesWithOutputIdentity) at
1 entities) at EFCore.BulkExtensions.SqlBulkOperation.Merge[T](DbContext context, IList
EFCore.BulkExtensions.TableInfo.LoadOutputData[T](DbContext context,
IList1 entities, TableInfo tableInfo, OperationType operationType,
1 progress) at EFCore.BulkExtensions.DbContextBulkExtensions.BulkInsert[T](DbContext context, IList
Action1 entities, BulkConfig bulkConfig, Action
1 progress)
at MyProject.Data.Repository.Repository1.CreateRange(List
1 entities)
我有一个父实体和子实体。我想做的是,首先批量插入父级,然后将为父级生成的 Id 分配给其子级。然后批量插入子项。
CreateRange
方法:
public List<T> CreateRange(List<T> entities)
{
var bulkConfig = new BulkConfig { PreserveInsertOrder = true, SetOutputIdentity = true };
_dbContext.BulkInsert(entities, bulkConfig);
return entities;
}
批量插入代码:
// Index parents. (Since PreserveInsertOrder = true is set.)
parents.ForEach(x => x.Id = parents.IndexOf(x) + 1);
_parentRepository.CreateRange(parents);
// parent-child relation mapping.
parents.ForEach(x => x.Children.ToList().ForEach(y => y.ParentId = x.Id));
var children = parents.SelectMany(x => x.Children).ToList();
// Index children. (Since PreserveInsertOrder = true is set.)
children.ForEach(x => x.Id = children.IndexOf(x) + 1);
_childRepository.CreateRange(children);
并不总是能够重现此问题。我无法确定重现此问题的条件。
最佳答案
该异常是由于批量插入操作之前分配的Id与数据库中已存在的Id冲突所致。解决方案是使用数据库中没有的 Id。例如,负数。这仍然可以保留插入顺序,因为重要的是要插入的列表中实体之间的相对顺序。
修改后的代码:
// Index parents with non-conflict keys. (Since PreserveInsertOrder = true is set.)
parents.ForEach(x => x.Id = parents.IndexOf(x) - parents.Count);
_parentRepository.CreateRange(parents);
// parent-child relation mapping.
parents.ForEach(x => x.Children.ToList().ForEach(y => y.ParentId = x.Id));
var children = parents.SelectMany(x => x.Children).ToList();
// Index children with non-conflict keys. (Since PreserveInsertOrder = true is set.)
children.ForEach(x => x.Id = children.IndexOf(x) - children.Count);
_childRepository.CreateRange(children);
关于c# - EF Core 批量扩展 : Index was out of range on BulkInsert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60087448/
我试图通过在pymongo中进行批量插入来插入500个文档,但出现此错误 File "/usr/lib64/python2.6/site-packages/pymongo/collection.py"
在我正在开发的应用程序中,我使用 spring、hibernate 和 envers 进行审计。 envers 适用于 hibernateTemplate.insert、hibernateTempla
如果不存在,我需要批量插入,但是如果文档已经存在,则需要覆盖整个文档,除了一个字段。 例如: 如果数据库包含此文档 { "_id": 234, "text": "hello", "reac
我正在尝试使用位于 http://efbulkinsert.codeplex.com/ 的 EntityFramework.BulkInsert .它是 Entity Framework 的扩展。 我
这个问题在这里已经有了答案: How to use EntityFramework.BulkInsert? (1 个回答) 关闭 8 年前。 我正在尝试使用,this ,但是系统找不到lib的方法.
我尝试使用多个线程执行批量插入。在使用 linq 读取一个数据表(称为“dt”)的 1000 行后,它创建了一个新的数据表并将批量插入到数据库中。 有初始化线程的代码: ManualR
我的目标 我想批量(事务性)将多条记录插入到 sqlite 中。 我的问题 我找到了 android.content.ContentResolver 方法。 bulkInsert (..) 有趣但 j
我正在尝试使用 EntityFramework.BulkInsert用于利用 EF6 和 SqlBulkCopy 的库。 文档看起来非常简单,但是,我无法将任何数据填充到数据库中。 对于一个复杂的例子
我无法使用 BulkInsert 触发 OnBeforeStore。 它在常规 Store 操作期间很好地触发。 我正在尝试使用发票编号生成器来添加格式化的编号,我想在 OnBeforeStore 中
我目前正在使用 EntityFramework.BulkInsert,它被包装在一个具有事务范围的 using block 中,以生成实体的批量保存。例如 using(var tranScope =
几天前,我遇到了 EF 中最著名的问题之一,即批量插入。经过一番谷歌搜索后,我发现了这个:http://efbulkinsert.codeplex.com/ 在使用复杂的数据模型失败后,我回到了一个简
我正在使用 Entityframework 6,我正在尝试在数据库中插入父子类型的数据。我正在使用 Entityframework.BulkInsert 插入数据。我在所有表中都有autoIncrem
我有一个包含这段代码的 Sequelize 迁移脚本。 const [recipeCopies, ingredientCopies] = await Promise.all([ queryInte
我目前正在玩 EntityFramework.BulkInsert。 虽然它确实有助于提高简单插入的性能(16 秒,1.000.000 行),但我找不到有关插入映射到多个表的对象的任何信息。唯一与此相
如何及时插入具有复杂类型的多个实体? 考虑以下几点: public class Entity { public Address Address { get; set; } } [ComplexTy
在所有批量插入数据库完成后,我只需要一个通知。请提供使用 bulkInsert() 函数的示例。我在互联网上找不到合适的例子。请帮助!!!! 最佳答案 这是使用 ContentProvider 的 b
现在对于我的应用程序,当我想为我的 ContentProvider 更改数据时,我只使用 ContentResolver 的插入、更新和删除方法。但是在 Android SDK 中的几个示例项目中,我
我在使用 EF 核心批量扩展的批量插入时收到以下错误: Index was out of range. Must be non-negative and less than the size of t
我在使用 EF 核心批量扩展的批量插入时收到以下错误: Index was out of range. Must be non-negative and less than the size of t
问题 假设我想使用 ContentProvider 在表格中插入 1000 个元素。为此,我通常会使用 bulkInsert。 但是如果我想要成功插入操作的 ID 怎么办?我无法通过 bulkInse
我是一名优秀的程序员,十分优秀!