我有一个使用SQL Server数据库的c# . net 6 Web API。我有一个API来批量上传一次几千行。如果我将服务层编写为每次插入一行,它可以工作,但它是慢。如果每200行调用一次db.SaveChanges()
,速度会快3倍。(我试过了)。
问题是当一条记录失败时(例如违反UNIQUE KEY),那么所有200插入记录失败。
我试图提前检查关键违规(针对数据库和200组中的其他记录),这在localhost
上有效…但是由于一些奇怪的原因,当我把它部署到Azure时失败了。
有什么办法可以做到吗?我必须在"快"one_answers"快"之间做出选择吗?或"reliable" ?
SaveChanges捕获DbUpdateException失败后,您可以分离或纠正失败的实体并再次尝试。SaveChanges()使用事务,因此如果失败,则没有保存任何更改。
注意,您可能需要尝试多次,因为通常只有第一次失败才会返回给客户端。