我们目前面临着一个问题,我们的代码,这是用来推数以千计(有时更多)的条目在我们的数据库一次。
我们为此使用的技术包括:
- C#语言
- 实体框架(最新版本)
- Oracle第12版c
- Dapper Plus(最新版本)
我们的代码看起来有点像这样:
Try
{
Trans.BulkInsert(ParentEntity)
.AlsoBulkInsert(c => c.ChildEntityA)
.ThenBulkInsert(c => c.ChildEntityB);
}catch(Exception ex)
{
*error management*
}
对于我们的大多数用例来说,这都能很好地工作。但是当在DB中插入时发生错误时,我们就遇到了一个小问题:我们目前无法确定具体是哪一行触发了错误,这迫使我们将整批数据设置为Error。
我们收到的异常属于Oracle.ManagedDataAccess.Client.OracleException类型,与DbUpdateException不同,该异常不具有.Entries属性。
由于遗留的原因,我们也不能直接访问上下文,我们必须使用一个工厂,它给我们提供了非常有限的访问权限(我们基本上可以获得一个连接字符串,并通过工厂初始化一个连接,但仅此而已)。
在我们使用的技术和面临的限制下,有没有办法知道哪一行导致了插入错误?
1条答案
按热度按时间svgewumm1#
大 容量 插入 的 问题 是 我们 永远 不 知道 哪 一 行 出错 了 , 我们 只 知道 插入 失败 了 。
发生 错误 时 , 可以 逐个 重试 并 获取 有关 错误 的 信息 :
中 的 每 一 个
但是 , 请 注意 , 此 功能 仅 在 SQL Server 上 进行 过 测试 。
如果 您 有 任何 问题 , 我 建议 您 直接 联系 我们 或 在 GitHub 上 发布 :https://github.com/zzzprojects/Dapper-Plus/issues 的 最 大 值