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

opd*_*pdb 10 c# entity-framework one-to-many model-binding junction-table

我有以下型号

public class PageConfig : Base
{
    // Properties Etc..

    public ICollection<Image> ScrollerImages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

modelBuilder.Entity<PageConfig>()
    .HasMany(x => x.ScrollerImages)
    .WithMany()
    .Map(x =>
    {
        x.ToTable("junc_PageConfigScrollerImages");
        x.MapLeftKey("PageConfigID");
        x.MapRightKey("ImageID");
    });
Run Code Online (Sandbox Code Playgroud)

这导致图像的空集合.

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

编辑

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

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

oct*_*ccl 6

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

public class PageConfig
{
    public int Id {get;set;}

    //navigation property
    public ICollection<Image> ScrollerImages {get;set;}
}

public class Image 
{
    public int Id {get;set;}

    //FK
    public int? PageConfigId {get;set;}

    //navigation property
    public PageConfig PageConfig {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

而Fluent Api配置将是:

modelBuilder.Entity<Image>()
            .HasOptional(i=>i.PageConfig)
            .WithMany(pc=>pc.ScrollerImages)
            .HasForeignKey(i=> i.PageConfigId);
Run Code Online (Sandbox Code Playgroud)

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

modelBuilder.Entity<PageConfig>()
            .HasMany(pc => pc.ScrollerImages)
            .WithOptional();
Run Code Online (Sandbox Code Playgroud)

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