2011-09-05 172 views
1

我(第一码)使用实体框架4.1和定义类似于以下实体框架(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 
} 

我想实现是添加另一个属性举行“MainImage实体“ImageItem类型的项目,不一定出现在缩略图集合中。

我曾尝试加入以下

public virtual ImageItem MainImage { get; set; } 

但这覆盖MyItemWithImages.Thumbnails集合之间的关系 - 我想发生这样的不是什么。

任何人都可以指出我在正确的方向添加这个新的属性吗?

+2

您正在使用Linq-to-sql中的'Column'属性。 EF将完全忽略它。它只是因为默认约定。 –

回答

2

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

覆盖您的自定义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")); 
} 

OnModelCreating方法如果您已经包含了外键列作为属性然后使用这些中的映射。

请通过Fluent Mapping API了解有关映射的更多详细信息。

+0

很好的答案!也是为了这个。 – Rushino