【发布时间】:2023-03-03 03:44:01
【问题描述】:
我正在使用 Entity Framework Core 进行一些批量插入。为了最大程度地减少到数据库的往返次数,新插入以 100 个为一组进行批处理,然后再添加到数据库上下文中并使用 SaveChanges() 保存。
当前的问题是,如果任何批处理由于例如表上的唯一键违规而无法插入,则整个事务将回滚。在这种情况下,理想的做法是简单地丢弃无法插入的记录,然后插入其余记录。
我很可能需要为此编写一个存储过程,但是有没有办法让 Entity Framework Core 跳过无法插入的行?
【问题讨论】:
-
这里有两个您可能想阅读的帖子。我不建议任何人作为解决方案。只是它们与您的问题有关:sqlteam.com/articles/introduction-to-transactions 和 stackoverflow.com/questions/22486489/…
-
@jdweng 谢谢,但问题是我不希望事务在失败时回滚,理想情况下我希望它提交它能够提交的任何行并丢弃其余行。跨度>
-
您只想回滚一行,而不是所有行。
-
您的插入必须包含
where not exists检查,我不知道您的 EF 是否可以这样做,如果不是,最好的方法是您将一批数据传递给的存储过程,或者使用序列化的 json 或数据表转换成自定义数据类型。
标签: c# sql-server asp.net-core entity-framework-core asp.net-core-3.1