我正在寻找一种使用Entity Framework编写代码的方法,以更新符合条件的1000条记录。
在SQL中它看起来像这样
var result2 = (dc.Table1
.Where(p => p.Descripcion.Contains(descripcion) && p.Estado == 1)
.GroupJoin(dc.Table2,
p => p.Codigo,
a => a.Codigo,
(p, a) => new { p = p, a = a }
)
.SelectMany(
temp => temp.a.DefaultIfEmpty(),
(temp, a) => new Listado()
{
codigo = temp.p.Codigo,
descripcion = temp.p.Descripcion,
alias = a.Descripcion,
id = a.Id
})
)
.ToList();
仅仅为了更新而将所有项目加载到内存中是没有意义的。
我想避免编写常规SQL语句(如果可能)
答案 0 :(得分:6)
开箱即用,实体框架没有这样的能力。您需要在更新之前加载实体,或者您需要求助于原始SQL(作为临时语句,或通过调用存储过程)。
但是,有一些EF扩展程序包声称支持此批量更新和批量删除方案。我没有任何个人经验,但请给他们看看:
答案 1 :(得分:1)
使用Entity Framework我相信你必须将数据加载到内存中。你怎么还要发表你的陈述?如果您真的不想将数据加载到内存中并且让SQL Server处理它(如果您正在使用SQL Server),那么您可以编写从数据层调用的存储过程
答案 2 :(得分:0)
你可以获得所有项目并像这样循环更新它们
(from x in dataBase.Items
where x.Name.Contains("summer")
select x).ToList().ForEach(xx => x.IsInSeason=1);
如果您使用实体框架,则应将所有项目作为对象,进行nessecar更改并保存。