ydo*_*dou 8 c# sql entity-framework entity-framework-6
我想要实现的是简单的SQL查询:UPDATE TABLE SET COLUMN = COLUMN + 1
有没有办法让它在没有首先将所有记录(数千)加载到内存并循环遍历每个记录以增加列然后将其保存回来的情况下实现?
编辑
我尝试了原始的SQL,它工作.我必须从连接字符串和连接上下文中的数据库模式名称决定sql提供程序.之后,我将使用相应的sql查询来更新表.
对于SQL,它看起来像UPDATE schemaname.TABLE SET COLUMN = COLUMN + 1.对于POSTGRESQL,我必须双重引用模式名称,表名和列名:UPDATE"schemaname"."TABLE"SET"COLUMN"="COLUMN"+ 1.
使用纯 EF,您是对的:您必须一一加载实体,设置属性,然后保存。效率很低。
我知道的两种选择是:
引用他们的主页:
批量更新和删除
实体框架当前的限制是,为了更新或删除实体,您必须首先将其检索到内存中。现在在大多数情况下这都很好。然而,有些情况下性能会受到影响。此外,对于单个删除,必须先检索对象,然后才能删除该对象,这需要两次调用数据库。批量更新和删除消除了在修改实体之前检索和加载实体的需要。
正在删除
//delete all users where FirstName matches
context.Users.Where(u => u.FirstName == "firstname").Delete();
Run Code Online (Sandbox Code Playgroud)
更新
//update all tasks with status of 1 to status of 2
context.Tasks.Update(
t => t.StatusId == 1,
t2 => new Task {StatusId = 2});
//example of using an IQueryable as the filter for the update
var users = context.Users.Where(u => u.FirstName == "firstname");
context.Users.Update(users, u => new User {FirstName = "newfirstname"});
Run Code Online (Sandbox Code Playgroud)