0

我有

User:
 -ID
 -Name

Badge
 -ID
 -Name (E.G "User has made 100 posts", the same relationship as Stackoverflow)

所以我意识到我需要第三张表,(因为徽章也在数据库中定义,所以我创建了:

UserBadge
 -ID
 -User
 -Badge

所以现在在我的用户类中我有

List<UserBadge> Badges;

问题是我要去

Users.Find(1).Badges.Where(x => x.User == user && x.Badge = badgeIWant)
     .FirstOrDefault();

(或类似的东西)因为...... EF 没有智能(我猜)自动知道“徽章”应该只包括用户匹配的那些。

我该怎么做?正在想我可以为徽章定制一个吸气剂,其中包含 LINQ 条件...

4

2 回答 2

2

这是 EF 4.3 代码优先:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;

namespace ConsoleApp
{
    public class User
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Badge> Badges { get; set; }
    }

    public class Badge
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public virtual ICollection<User> Users { get; set; }
    }

    public class Context : DbContext
    {
        public Context()
            : base("Votes")
        {

        }
        public DbSet<User> Users { get; set; }
        public DbSet<Badge> Badge { get; set; }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            User user = context.Users.Include("Badges").Where(u => u.ID == 1).SingleOrDefault();
            if(user != null)
            {
                //write your code.
            }

            Console.ReadKey();
        }
    }
}

我已经测试过了,这应该可以工作。这通常是多对多关系,因为用户可以拥有许多徽章,而 1 个徽章可以属于许多用户。如果您运行此代码,您会发现 EFBadgeUsers使用 BadgeID 和 UserID 作为外键创建表。从那里您可以查询并且 EF 知道您在谈论哪些徽章。

于 2012-08-14T06:33:40.333 回答
0

如果您想获得用户的所有徽章,那么只需使用users.Find(1).Badges. EF 会自动过滤与用户相关的徽章。

于 2012-08-14T06:14:14.253 回答