Entity framework 实体框架:使用Case语句更新数据
假设我有一个包含以下列和值的SQL表:Entity framework 实体框架:使用Case语句更新数据,entity-framework,dbcontext,entity-framework-4.3,Entity Framework,Dbcontext,Entity Framework 4.3,假设我有一个包含以下列和值的SQL表: +----+---------+------------+---------+------------+ | ID | Status1 | Condition1 | Status2 | Condition2 | +----+---------+------------+---------+------------+ | 1 | 1 | 1 | 1 | 1 | | 2 | 1 |
+----+---------+------------+---------+------------+
| 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 |
+----+---------+------------+---------+------------+
我想分别根据条件1和条件2中的值更新状态1和状态2的值
我的SQL语句如下所示:
更新
我的桌子
设置
状态1=情况条件1
当1到3时
其他4
完,,
状态2=情况条件2
当1到3时
其他4
结束
哪里
ID=@targetRowID
如果我针对每个ID分别对表运行上述SQL语句,我将得到以下值:
+----+---------+------------+---------+------------+
| 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 |
+----+---------+------------+---------+------------+
在Entity Framework中,我通过以下方式执行相同类型的更新:
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();
这是可行的,但它首先从数据库中获取数据,然后执行第二个查询来进行更新。是否可以像上面的普通SQL代码那样一次性完成更新?LINQ总是在更新之前执行查询。这是一个众所周知的技术烦恼 (挑剔:“这是可行的,但它首先从数据库获取数据,然后进行第二次查询以进行更新。”发送到数据库的第二件事不是“查询”。“查询”是标准英语,是一个问题,因此数据库查询是一个信息请求,即SELECT语句。更新是一个命令。)