Imagine I have a SQL table with the following columns and values:
+----+---------+------------+---------+------------+
| ID | Status1 | Condition1 | Status2 | Condition2 |
+----+---------+------------+---------+------------+
| 1 | 1 | 1 | 1 | 1 |
| 2 | 1 | 0 | 1 | 1 |
| 3 | 1 | 1 | 1 | 0 |
| 4 | 1 | 0 | 1 | 0 |
+----+---------+------------+---------+------------+
I want to update the values of Status1 and Status2 depending on the values in Condition1 and Condition2 respectively.
My SQL statement would look like this:
UPDATE
myTable
SET
Status1 = CASE Condition1
WHEN 1 THEN 3
ELSE 4
END,
Status2 = CASE Condition2
WHEN 1 THEN 3
ELSE 4
END
WHERE
ID = @targetRowID
If I were to run the above SQL statement against the table for each ID indiviually, I would wind up with the following values:
+----+---------+------------+---------+------------+
| ID | Status1 | Condition1 | Status2 | Condition2 |
+----+---------+------------+---------+------------+
| 1 | 3 | 1 | 3 | 1 |
| 2 | 4 | 0 | 3 | 1 |
| 3 | 3 | 1 | 4 | 0 |
| 4 | 4 | 0 | 4 | 0 |
+----+---------+------------+---------+------------+
In Entity Framework, I do the same kind of update by doing this:
var myRow = dbContext.myTable.Single(r => r.ID == 1);
myRow.Status1 = (myRow.Condition1 == 1) ? 3 : 4;
myRow.Status2 = (myRow.Condition2 == 1) ? 3 : 4;
dbContext.SaveChanges();
This works, but it first fetches the data from the database and then does a second query to do the update. Is it possible to do the update all in one shot like the plain SQL code above does?