如何在 EF 中配置一对多关系
How to configure a One-to-Many relationship in EF
我有以下型号
public class PageConfig : Base
{
// Properties Etc..
public ICollection<Image> ScrollerImages { get; set; }
}
我的方法是使用联结 table { PageConfigID, ImageID } 进行绑定。
在我的模型活页夹中,我尝试了以下操作..
modelBuilder.Entity<PageConfig>()
.HasMany(x => x.ScrollerImages)
.WithMany()
.Map(x =>
{
x.ToTable("junc_PageConfigScrollerImages");
x.MapLeftKey("PageConfigID");
x.MapRightKey("ImageID");
});
这会导致图像集合为空。
如何将这些图像绑定到 PageConfig 模型?
编辑
大部分问题是由于用户错误造成的。 jic 这发生在你身上..
检查数据库中的键约束是否设置正确。
模型上的 ICollection 需要是虚拟的。
"...您可以使用 Fluent API 使用学生实体 类 配置一对多关系,如下所示。"
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//one-to-many
modelBuilder.Entity<Student>()
.HasRequired<Standard>(s => s.Standard)
.WithMany(s => s.Students)
.HasForeignKey(s => s.StdId);
}
"...使用 HasOptional 方法而不是 HasRequired 方法使外键列可为空。"
所以你会寻找这样的东西:
modelBuilder.Entity<Image>()
.HasOptional<PageConfig>(x => x.PageConfig)
.WithMany(x => x.ScrollerImages)
.HasForeignKey(x => x.PageConfigId)
如果您想在这两个实体之间创建一对多关系,您的模型将如下所示:
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;}
}
Fluent Api 配置为:
modelBuilder.Entity<Image>()
.HasOptional(i=>i.PageConfig)
.WithMany(pc=>pc.ScrollerImages)
.HasForeignKey(i=> i.PageConfigId);
如果您的想法是创建单向一对多关系,则删除 Image
实体上的 FK 和导航 属性 并以这种方式配置关系:
modelBuilder.Entity<PageConfig>()
.HasMany(pc => pc.ScrollerImages)
.WithOptional();
查看此 link 了解有关此类关系的更多信息
我有以下型号
public class PageConfig : Base
{
// Properties Etc..
public ICollection<Image> ScrollerImages { get; set; }
}
我的方法是使用联结 table { PageConfigID, ImageID } 进行绑定。
在我的模型活页夹中,我尝试了以下操作..
modelBuilder.Entity<PageConfig>()
.HasMany(x => x.ScrollerImages)
.WithMany()
.Map(x =>
{
x.ToTable("junc_PageConfigScrollerImages");
x.MapLeftKey("PageConfigID");
x.MapRightKey("ImageID");
});
这会导致图像集合为空。
如何将这些图像绑定到 PageConfig 模型?
编辑
大部分问题是由于用户错误造成的。 jic 这发生在你身上..
检查数据库中的键约束是否设置正确。
模型上的 ICollection 需要是虚拟的。
"...您可以使用 Fluent API 使用学生实体 类 配置一对多关系,如下所示。"
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//one-to-many
modelBuilder.Entity<Student>()
.HasRequired<Standard>(s => s.Standard)
.WithMany(s => s.Students)
.HasForeignKey(s => s.StdId);
}
"...使用 HasOptional 方法而不是 HasRequired 方法使外键列可为空。"
所以你会寻找这样的东西:
modelBuilder.Entity<Image>()
.HasOptional<PageConfig>(x => x.PageConfig)
.WithMany(x => x.ScrollerImages)
.HasForeignKey(x => x.PageConfigId)
如果您想在这两个实体之间创建一对多关系,您的模型将如下所示:
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;}
}
Fluent Api 配置为:
modelBuilder.Entity<Image>()
.HasOptional(i=>i.PageConfig)
.WithMany(pc=>pc.ScrollerImages)
.HasForeignKey(i=> i.PageConfigId);
如果您的想法是创建单向一对多关系,则删除 Image
实体上的 FK 和导航 属性 并以这种方式配置关系:
modelBuilder.Entity<PageConfig>()
.HasMany(pc => pc.ScrollerImages)
.WithOptional();
查看此 link 了解有关此类关系的更多信息