实体框架可以多对多但也可以不止一次出现关系

时间:2013-03-27 03:56:09

标签: entity-framework orm

我不知道如何定义这种关系。我有用户和徽章,用户可以收集许多徽章,他们也可以多次拥有一定的徽章。 (就像Stackoverflow一样)。

如何定义此numberOfTimesEarntBadge计数?

我尝试过再次使用user.badges.add(badge),但它没有插入数据库。

目前,徽章定义为(在用户类内):

public virtual ICollection<Badge> Badges { get; set; }  

谢谢!

1 个答案:

答案 0 :(得分:1)

你需要一个关系实体,例如UserBadge,因此nav属性将是ICollection UserBadges

UserBadge将拥有一个导航属性给User和Badge,以及一个PK ID字段。

要获得徽章计数,您可以按徽章对用户的UserBadges ICollection进行分组,然后计算每个组:

var badgeCountQuery =
for ub in userEntity.UserBadges
group ub by ub.Badge into g
select new
{
    Badge = g.Key,
    BadgeCount = g.Count()
};