实体框架(4.1)关系
本文关键字:关系 框架 实体 | 更新日期: 2023-09-27 18:07:39
我正在使用实体框架4.1(代码优先),并定义了类似于以下的实体
public class ImageItem
{
[Column(IsDbGenerated = true, IsPrimaryKey = true, AutoSync = AutoSync.OnInsert)]
public int Id { get; set; }
public string ImageUrl { get; set; }
public int Height { get; set; }
public int Width { get; set; }
// other stuff in here
}
public class MyItemWithImages
{
[Column(IsDbGenerated = true, IsPrimaryKey = true, AutoSync = AutoSync.OnInsert)]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ImageItem> Thumbnails { get; set; }
// other stuff in here
}
我想要实现的是添加另一个属性来保存ImageItem类型的"MainImage"项目,这并不一定出现在缩略图集合中。
我尝试添加以下
public virtual ImageItem MainImage { get; set; }
,但这覆盖了MyItemWithImages之间的关系。缩略图收集-不是我想发生的事情。
谁能告诉我添加这个新属性的正确方向?您将需要使用流畅映射来映射您的模型。
覆盖自定义DbContext
的OnModelCreating
方法
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyItemWithImages>()
.HasMany(m => m.Thumbnails)
.WithOptional()
.Map(m => m.MapKey("foreignKeyColumnName"));
modelBuilder.Entity<MyItemWithImages>()
.HasOptional(m => m.MainImage)
.WithMany()
.Map(m => m.MapKey("foreignKeyColumnName"));
}
如果您已将外键列作为属性包含,则在映射中使用它们。
查看Fluent Mapping API了解更多关于映射的细节