我建立了这样的多对多关系(删除所有不相关的属性):
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);
}
当我逐步完成数据库播种时,看起来当我创建一些Makes并创建一些关键词然后在make中添加一些关键词时,正确创建了实体。我可以使用手表在两个实体之间导航。
数据库初始化完成后,我查看数据库,看起来所有数据都在那里。但是,当我在视图中实际显示关键字时,使我知道我分配了关键字的计数为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>
}
}
}
没有任何反应,关键字不再与制作相关联。
我错过了什么?
谢谢!
答案 0 :(得分:1)
将导航属性标记为virtual
以启用延迟加载 ...
public virtual ICollection<KeyWords> KeyWords {get; set;}
...或在加载品牌时使用Include
(急切加载):
var makes = context.Makes.Include(m => m.KeyWords).ToList();
(您的代码文件中using System.Data.Entity;
的lambda版本需要Include
。)