号外号外: 原[图享网]更名为 码友网(codedefault.com) 啦,感谢大家一路上的陪伴与支持。代码的世界里,码友网与大家一起同行!

[Entity Framework].NET/C#应用程序编程开发中如何使用Entity Framework一次性更新满足查询条件的多行数据?

Entity Framework 作者: Rector 194阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.NET/C#的应用程序编程开发中,假如当前有如下的数据表及示例数据:

id     userid  friendid   name    status
1      1        2         venkat  false
2      1        3         sai     true
3      1        4         arun    false
4      1        5         arjun   false

如果查询条件为 friendids=2,3,4,那么需要设置对应这几行数据的status=true,如何使用Entity Framework来一次性更新满足条件的数据呢?

方案一

如果要求执行效率的话,建议使用context.Database.ExecuteSqlCommand()或者context.Database.ExecuteSqlCommandAsync()方法,直接执行SQL语句来处理,实现如下:

string query = "Update YourTable Set ... Where ...";    
context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));

方案二

如果只需要更新一个字段的值,使用Entity Framework的实现方式有如几个方式:

方式一:

var ls=new int[]{2,3,4};
using (var db=new SomeDatabaseContext())
{
    var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
    some.ForEach(a=>a.status=true);
    db.SaveChanges();
}

方式二:

using (var db=new SomeDatabaseContext())
{
     db.SomeTable
       .Where(x=>ls.Contains(x.friendid))
       .ToList()
       .ForEach(a=>a.status=true);

     db.SaveChanges();
}

方式三:

using (var db=new SomeDatabaseContext())
{
    foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
    {
        some.status=true;
    }
    db.SaveChanges();
}

方案三

如果需要一次性更新的字段不止一个,而是多个字段,又应该如何实现呢?
比如例中,要更新namestatus两个字段。 解决方案如下:

方式一:

var ls=new int[]{2,3,4};
var name="Foo";
using (var db=new SomeDatabaseContext())
{
    var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
    some.ForEach(a=>
                    {
                        a.status=true;
                        a.name=name;
                    }
                );
    db.SaveChanges();
}

方式二:

using (var db=new SomeDatabaseContext())
{
    db.SomeTable
        .Where(x=>ls.Contains(x.friendid))
        .ToList()
        .ForEach(a=>
                    {
                        a.status=true;
                        a.name=name;
                    }
                );
    db.SaveChanges();
}

方式三:

using (var db=new SomeDatabaseContext())
{
    foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
    {
        some.status=true;
        some.name=name;
    }
    db.SubmitChanges();
}

阅读了该文章的人还浏览了...

本文永久链接码友网 » [Entity Framework].NET/C#应用程序编程开发中如何使用Entity Framework一次性更新满足查询条件的多行数据?

发布于: 2018-06-22 10:27:58
分享扩散: