SQL Server 使.NET REST API批量上传更快,而不会导致SQL冲突唯一键

thigvfpy  于 2022-12-26  发布在  .NET
关注(0)|答案(1)|浏览(104)

我有一个使用SQL Server数据库的C# .NET 6 Web API。我有一个API可以批量上载一次数千行。如果我编写服务层插入每一行 * 一次一行 *,它可以工作,但它是 * 慢 *。如果我每200行只调用一次db.SaveChanges(),它会快3倍。(我试过了)
问题是当一个记录失败时(例如违反UNIQUE KEY),那么所有200个记录都无法插入。
我尝试提前检查密钥违规(针对数据库和200条记录中的其他记录),这在localhost上有效...但由于一些奇怪的原因,当我将其部署到Azure时失败了。
有什么办法可以做到这一点吗?我必须在“快速”和“可靠”之间做出选择吗?

hc8w905p

hc8w905p1#

在SaveChanges失败后,捕获DbUpdateException,您可以分离或更正失败的实体,然后重试。SaveChanges()使用事务,因此失败时不会保存任何更改。
注意,您可能需要尝试多次,因为通常只有第一次失败会返回给客户端。

相关问题