实体框架(4.1)关系

时间:2011-09-05 08:27:03

标签: c# entity-framework-4.1

我正在使用Entity Framework 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.Thumbnails集合之间的关系 - 而不是我想要发生的事情。

有人能指出我正确的方向来添加这个新房产吗?

1 个答案:

答案 0 :(得分:2)

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

覆盖自定义OnModelCreating

DbContext方法
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以获取有关映射的更多详细信息。