我有一个由属性Id标识的用户集合,对于每个用户,我想将他的用户名更新为username+"!"。
在bltoolkit中,我尝试这样做:
using(var db = new DbManager)
{
foreach(var user in users)
{
db.GetTable<User>().Where(x=>x.Id == user.Id).Set(x=>x.Username, x.Username + "!").Update();
}
}
我认为这将使n查询数据库(而n是用户集合的大小),这是我试图避免的。
是否有其他(更好的)解决方案来更新整个集合?
将此用法添加到您的代码中:
using BLToolkit.Data.Linq
现在你可以在你的DbManager
中使用Update<T>
扩展方法。此方法允许您通过将实体集合作为参数传递来进行批量更新。
在你的例子中像这样使用:
using(var db = new DbManager)
{
foreach(var user in users)
user.Username = user.Username + "!"; //update each user in collection first
db.Update<User>(users); //just one database call for batch update
}