我有一个使用SQL Server数据库的C# .NET 6 Web API。我有一个API可以批量上载一次数千行。如果我编写服务层插入每一行 * 一次一行 *,它可以工作,但它是 * 慢 *。如果我每200行只调用一次db.SaveChanges()
,它会快3倍。(我试过了)
问题是当一个记录失败时(例如违反UNIQUE KEY),那么所有200个记录都无法插入。
我尝试提前检查密钥违规(针对数据库和200条记录中的其他记录),这在localhost
上有效...但由于一些奇怪的原因,当我将其部署到Azure时失败了。
有什么办法可以做到这一点吗?我必须在“快速”和“可靠”之间做出选择吗?
1条答案
按热度按时间hc8w905p1#
在SaveChanges失败后,捕获DbUpdateException,您可以分离或更正失败的实体,然后重试。SaveChanges()使用事务,因此失败时不会保存任何更改。
注意,您可能需要尝试多次,因为通常只有第一次失败会返回给客户端。