如何在EF中配置一对多关系

我有以下型号

public class PageConfig : Base { // Properties Etc.. public ICollection ScrollerImages { get; set; } } 

我的方法是使用联结表{PageConfigID,ImageID}进行绑定。

在我的模型活页夹中,我尝试了以下..

 modelBuilder.Entity() .HasMany(x => x.ScrollerImages) .WithMany() .Map(x => { x.ToTable("junc_PageConfigScrollerImages"); x.MapLeftKey("PageConfigID"); x.MapRightKey("ImageID"); }); 

这导致图像的空集合。

如何将这些图像绑定到PageConfig模型?

编辑

大多数问题是由于用户错误。 这发生在你身上……

检查数据库中的键约束是否已正确设置。
模型上的ICollection需要是虚拟的。

如果要在这两个实体之间创建一对多关系,您的模型将如下所示:

 public class PageConfig { public int Id {get;set;} //navigation property public ICollection ScrollerImages {get;set;} } public class Image { public int Id {get;set;} //FK public int? PageConfigId {get;set;} //navigation property public PageConfig PageConfig {get;set;} } 

而Fluent Api配置将是:

 modelBuilder.Entity() .HasOptional(i=>i.PageConfig) .WithMany(pc=>pc.ScrollerImages) .HasForeignKey(i=> i.PageConfigId); 

如果您的想法是创建单向一对多关系,则删除Image实体上的FK和导航属性,并以这种方式配置关系:

 modelBuilder.Entity() .HasMany(pc => pc.ScrollerImages) .WithOptional(); 

有关此类关系的详细信息,请查看此链接

根据http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx :

“…您可以使用Fluent API使用Student实体类配置一对多关系,如下所示。”

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { //one-to-many modelBuilder.Entity() .HasRequired(s => s.Standard) .WithMany(s => s.Students) .HasForeignKey(s => s.StdId); } 

“…使用HasOptional方法而不是HasRequired方法使外键列可以为空。”

所以你要寻找这样的东西:

 modelBuilder.Entity() .HasOptional(x => x.PageConfig) .WithMany(x => x.ScrollerImages) .HasForeignKey(x => x.PageConfigId)