2011-09-05 168 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