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)
由于使用了微服务架构,我想使用这个特定的查询。
如果你想直接使用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)
从 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)