我有一个用户表,我的User
实体有一个Rating
列。AUser
有一个名为 的导航属性,它是一个名为 rate 的表中 sIncomingRatings
列表的一对多关系。Rate
评级可以是正面的或负面的,并由IsPositive
布尔值表示。
我想找到该用户的所有评分,并将其存储在Rating
我的User
表的列中。考虑以下示例数据:
RaterID | RatedID | IsPositive
1 2 1
4 1 0
5 2 1
2 3 0
3 2 1
7 2 0
6 1 1
例如,在这种情况下,我希望我的用户 #2(由 ID 2 引用)Rating
字段变为 3,因为她有 3 个正面评价。
更新后,用户表应该是这样的:
UserID | Rating
1 1
2 3
3 0
4 0
5 0
6 0
7 0
因为我需要这条语句来运行 10000 多条记录,所以我不能在我的 ASP.NET 网站中使用常规 for 循环来更新记录,因为它会在我调用SaveChanges
. 我发现EntityFramework.Extended可以在一次调用中更新许多记录。这是我的两种方法:
db.Users.Where(u => true).Update(u => new User { Rating = u.IncomingRatings.Count(r => r.IsPositive) });
db.Users.Where(u => true).Update(u => new User { Rating = db.Rates.Where(r => r.RatedID == u.ID && r.IsPositive).Count() });
但是,我An aggregate may not appear in the set list of an UPDATE statement.
在两个查询中都遇到了错误。如何在 Entity Framework 6.1 中使用聚合值更新所有行?