Updating multiple rows Linq vs SQL

后端 未结 5 644
生来不讨喜
生来不讨喜 2021-01-01 17:06

Some time ago I wrote a piece of code to update multiple rows in a database table. The code was like this

var db = new MyDataContext();
db.Execute(\"UPDATE D         


        
5条回答
  •  刺人心
    刺人心 (楼主)
    2021-01-01 17:59

    The Linq-to-SQL version is going to SELECT every row from the details table that matches the query, pull them into memory, and create objects for them. Then when it applies the updates, it will use a separate UPDATE statement for each object, and will (by default) include a WHERE clause that checks the value of every column to make sure it hasn't changed since you did the SELECT. If the row has changed, Linq will throw an exception.

    The Linq version of the code is going to be MUCH slower (think 100x or 1000x slower), and expose you to additional exceptions.

    The SQL version might be a bit harder to maintain as you refactor code in the future, but it will make a world of difference to your database.

    I generally feel that Linq-to-SQL is great for selects and individual updates, and maybe for small batches the database would be fast enough that the extra queries wouldn't a problem, but I would have to think carefully before I used Linq for large batches, or on a web server.

提交回复
热议问题