如何在 C# 中的实体框架中使用 where 子句编写 SQL 更新查询

问题描述 投票:0回答:3

我知道要更新 EF 中的模型,我必须获取模型,然后更改它,然后 dbContext.SaveChanges() 但有时在我的 Asp.net mvc 项目中,我想更新表中的字段,但我不知道它的 id,必须使用 where 子句获取它。 但我不想连接两次数据库,因为在 ADO.net 中我可以写:

UPDATE MyTable SET Field3 = "NewValue" WHERE Active = 1 

现在我想为 EF 编写一个像这样工作的 linq to sql。 有什么办法吗? 谢谢

c# sql-server entity-framework linq
3个回答
12
投票

你不能。 EF 是 ORM,这意味着,您需要使用单独的对象(一一更新它们)。

查看 EntityFramework.Extended 库:

//update all tasks with status of 1 to status of 2
context.Tasks
    .Where(t => t.StatusId == 1)
    .Update(t => new Task { StatusId = 2 });

对于 EF Core:EntityFramework-Plus


5
投票

您可以使用EF中的原始查询功能。

var query = "UPDATE MyTable SET Field3 = 'NewValue' WHERE Active = 1";
using (var context = new YourContext()) 
{ 
    context.Database.ExecuteSqlCommand(query); 
}

0
投票

这是您可以从 EF 7 开始执行的操作,请查看高效更新了解更多详细信息。

做你正在寻找的事情就是

dbContext.MyTable
    .Where(mt => mt.Active == 1)
    .ExecuteUpdate(mt => mt.SetProperty(e => e.Field3, e => "New Value"));

与旧的解决方案不同,这将作为单个数据库操作进行操作。 高效更新文章还讨论了其他用途。

© www.soinside.com 2019 - 2024. All rights reserved.