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
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.