EF4.1 - 尝试更新许多行

时间:2011-11-30 18:16:50

标签: asp.net-mvc-3 c#-4.0 entity-framework-4.1

当用户访问一个特定页面时,我需要更新表格的所有行。 所有字段都需要更新为“false”。 我试过这段代码:

var history = db.UserHistory.Where(m => m.UserID == id);
TryUpdateModel(history);
history.IsActive = false;
db.SaveChanges();

但它会抛出一条错误信息。 任何人都可以帮我这个更新吗?

2 个答案:

答案 0 :(得分:1)

我一开始并不知道LINQ没有一次更新很多行,我必须做一个循环并更新每一行。我的最终代码就是这个:

var history = db.UserHistory.Where(m => m.UserID == id).ToList();
TryUpdateModel(history);
history.ForEach(m => m.IsActive = false);
db.SaveChanges();

答案 1 :(得分:0)

因为您似乎只是选择了一个条目,所以您可能希望将.FirstOrDefault()附加到您的第一行,该行应该显示为intellisense。

var history = db.UserHistory.Where(m => m.UserID == id).FirstOrDefault();
TryUpdateModel(history);
history.IsActive = false;
db.SaveChanges();

现在你正在返回一个IQueryable而不是一个条目。 FirstOrDefault将返回一个UserHistory实体,因此至少你要将一个项目传递给TryUpdateModel。