このような多対多の関係を設定します (無関係なプロパティをすべて削除します)。
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>
}
}
}
何も起こりません。キーワードはメーカーに関連付けられていません。
私は何が欠けていますか?
ありがとう!