1

このような多対多の関係を設定します (無関係なプロパティをすべて削除します)。

public class Makes
{
  [Key]
  public int MakeId { get; set; }

  public ICollection<KeyWords> KeyWords {get; set;}
}

public class KeyWords 
{
   public KeyWords()
   {
       Makes = new HashSet<Makes>();
   }

   [Key]
   public int KeyWordsId { get; set;}
   public string KeyWord { get; set;}
}

そして、コンテキスト定義で:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<KeyWords>().HasMany(w => w.Makes).WithMany(kw => kw.KeyWords).Map(
           m =>
           {
                m.MapLeftKey("KeyWords_KeyWordsID");
                m.MapRightKey("Makes_MakesID");
                m.ToTable("MakesKeyWords");
            });

        base.OnModelCreating(modelBuilder);
    }

データベースのシードをステップ実行すると、いくつかの Make を作成し、いくつかのキーワードを作成してから Make にいくつかのキーワードを追加すると、エンティティが正しく作成されたように見えます。時計を使用して、2 つのエンティティ間を問題なく移動できます。

データベースの初期化が完了した後、データベースを確認すると、すべてのデータがそこにあるように見えます。ただし、実際にビューにキーワードを表示すると、キーワードに割り当てた数が 0 になることがわかります。

@if (Model != null)
{
    Foreach(models.Makes item in model.Makes)
    {
        if (item.KeyWords.Count > 0) 
                {
                    <div class="KeyWords">
                    @foreach (Models.KeyWords kw in item.KeyWords)
                    {
                        <span class="KeyWord">@kw.KeyWord</span>
                    }
                    </div>
                }
     }
}

何も起こりません。キーワードはメーカーに関連付けられていません。

私は何が欠けていますか?

ありがとう!

4

1 に答える 1

1

遅延読み込みvirtualを有効にするようにナビゲーション プロパティをマークするか...

public virtual ICollection<KeyWords> KeyWords {get; set;}

...またはmakeIncludeをロードするときに使用します ( eager loading ):

var makes = context.Makes.Include(m => m.KeyWords).ToList();

using System.Data.Entity;(ラムダ バージョンの のコード ファイルで必要ですInclude。)

于 2013-09-16T17:15:49.030 に答える