实体框架(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之间的关系。缩略图收集-不是我想发生的事情。

谁能告诉我添加这个新属性的正确方向?

实体框架(4.1)关系

您将需要使用流畅映射来映射您的模型。

覆盖自定义DbContextOnModelCreating方法

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了解更多关于映射的细节