Heloo everyone - 我有这个测验问题,看看这个方法是否有什么问题,我解决了其他问题,但我看不出这个方法有什么问题。你们这个方法可以发现错误吗?
private void UpdateUsers(List<string> users)
{
foreach (var user in users)
{
ModelContainer DBContext = new ModelContainer();
var u = from q in DBContext.Users
where q.Name == user
select q;
u.IsActive = true;
DBContext.SaveChanges();
}
}
提前致谢,Laziale
答案 0 :(得分:1)
您正在为每次迭代创建一个ModelContainer实例,并且看起来很狡猾。
我会做类似的事情:
using(ModelContainer DBContext = new ModelContainer())
{
foreach (var user in users)
{
var u = (from q in DBContext.Users
where q.Name == user
select q).FirstOrDefault();
if(u!=null)
{
u.IsActive = true;
}
}
DBContext.SaveChanges(); //Save changes once, and not per user. Unless you can but I doubt it.
}
答案 1 :(得分:1)
你应该这样做:
private void UpdateUsers(List<string> users)
{
using(DBContext context = new DBContext("myConnectionString"))
{
foreach (var user in users)
{
var u = from q in DBContext.Users
where q.Name == user
select q;
u.IsActive = true;
}
}
}
使用using
语句,DBContext应自动保存。
答案 2 :(得分:0)
应该是select q.FirstOrDefault();
还是var u
应该是IEnumerable
,不是吗?