使用Entity Framework更新记录而不先加载

时间:2016-05-12 20:42:29

标签: c# sql entity-framework linq

我正在寻找一种使用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语句(如果可能)

3 个答案:

答案 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更改并保存。