linq 如何在C#中的Entity Framework中使用where子句编写SQL更新查询

bd1hkmkf  于 11个月前  发布在  C#
关注(0)|答案(3)|浏览(118)

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

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

字符串
现在我想写一个linq到sql的EF,这样的工作。是存在的任何方式?谢谢

vwkv1x7d

vwkv1x7d1#

你不能。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

crcmnpdw

crcmnpdw2#

你可以使用EF中的原始查询函数。

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

字符串

wswtfjt7

wswtfjt73#

这是你可以从EF 7开始做的事情,看看Efficient Updating了解更多细节。
做你想做的事

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

字符串
与旧的解决方案不同,这将作为单个数据库操作进行操作。Efficient Update文章还讨论了其他用途。

相关问题