如何使用 Entity Framework .NET Core 编写带有 where 子句的 SQL 更新查询

Kev*_*vin 5 c# sql entity-framework-core

我只想根据下面提到的条件更新一个字段。我知道如何用 SQL 编写它。我不确定如何在实体框架中实现这一点。

UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime
Run Code Online (Sandbox Code Playgroud)

由于使用了微服务架构,我想使用这个特定的查询。

Ale*_*ues 8

如果你想直接使用sql你可以使用ExecuteSqlCommand

如果您正在处理一个对象,然后进行更新,我会更改一个对象并调用SaveChanges,但事实并非如此..这是直接对表进行的更新,如果该表有数百万行,您希望执行sql该操作以获得性能。

例子

using(var context = new SampleContext())
{
    var commandText = "UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime";
    var newDateTime = new SqlParameter("@NewDateTime", myDateValue);
    var myId = new SqlParameter("@MyId", myIdValue);

    context.Database.ExecuteSqlCommand(commandText,  new[]{newDateTime,myId});
}
Run Code Online (Sandbox Code Playgroud)


Svy*_*liv 6

从 EF Core 7 开始,您可以使用新方法ExecuteUpdate/ ExecuteUpdateAsync

context.Table
   .Where(t => t.Id == myId && t.SomeDateTime > newDateTime)
   .ExecuteUpdate(b => b.SetProperty(x => x.SomeDateTime, x => newDateTime));
Run Code Online (Sandbox Code Playgroud)