问题描述
在.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();
}
方案三
如果需要一次性更新的字段不止一个,而是多个字段,又应该如何实现呢?
比如例中,要更新name
和status
两个字段。 解决方案如下:
方式一:
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();
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册