我正在使用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集合之间的关系 - 而不是我想要发生的事情。
有人能指出我正确的方向来添加这个新房产吗?
答案 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以获取有关映射的更多详细信息。