0

私は持っている

User:
 -ID
 -Name

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

したがって、3 番目のテーブルが必要であることに気付きました (バッジも DB で定義されているため、以下を作成しました:

UserBadge
 -ID
 -User
 -Badge

だから今私の User クラスで私は持っています

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();
        }
    }
}

私はそれをテストしましたが、これはうまくいくはずです。User は多くのバッジを持つことができ、1 つのバッジは多くのユーザーに属することができるため、これは通常、多対多の関係になります。このコードを実行すると、EF がBadgeUsersBadgeID と UserID を外部キーとして使用してテーブルを作成することがわかります。そこからクエリを実行すると、EF はどのバッジについて話しているかを認識します。

于 2012-08-14T06:33:40.333 に答える
0

ユーザーのすべてのバッジを取得したい場合は、 を使用してusers.Find(1).Badgesください。EF は、ユーザーに関連するバッジを自動的にフィルター処理します。

于 2012-08-14T06:14:14.253 に答える