2016-09-23 98 views
3

我想用控制器列出一些食品。我在UnitOfWork中使用Repository模式作爲另一個程序集中的數據,並在BaseApiController中引用它。 Data屬性是我的UnitOfWork實例。EF - LINQ to Entities不支持

var result = Data.Food 
      .FindAll() 
      .Select(FoodItemViewModel.Create); 

return result; 

這裏是我的ViewModel:

public static Expression<Func<FoodItem, FoodItemViewModel>> Create 
    { 
     get 
     { 
      return fi => new FoodItemViewModel 
      { 
       Id = fi.Id, 
       Description = fi.Description, 
       DiaryEntries = fi.DiaryEntries 
       .Select(s => new DiaryEntityViewModel() 
       { 
        Id = s.Id, 
        Quantity = s.Quantity 
       } 
      }; 
     } 
    } 

但我得到的是:

「指定的類型成員 'DiaryEntries' 不是在LINQ支持,以 實體只有初始值設定項,實體成員和實體導航 屬性均受支持。「

我DiaryEntries成員在視圖模型是

IEnumerable<DiaryEntityViewModel> 

和我DiaryEntries成員在數據實例

IRepository<DiaryEntry> 

和DiaryEntry是我的模型類

,這裏是我的FoodItem模型等級:

public class FoodItem 
    { 
     private IEnumerable<Measure> measures; 
     private IEnumerable<DiaryEntry> diaryEntries; 

     public FoodItem() 
     { 
      this.measures = new HashSet<Measure>(); 
      this.diaryEntries = new HashSet<DiaryEntry>(); 
     } 

     public int Id { get; set; } 

     public string Description { get; set; } 

     public virtual IEnumerable<DiaryEntry> DiaryEntries 
     { 
      get 
      { 
       return this.diaryEntries; 
      } 
      set 
      { 
       this.diaryEntries = value; 
      } 
     } 

     public virtual IEnumerable<Measure> Measures 
     { 
      get 
      { 
       return this.measures; 
      } 
      set 
      { 
       this.measures = value; 
      } 
     } 
    } 
+0

什麼是你想在這裏做什麼?我認爲你的問題可能是你正在向數據庫傳遞一個函數。在選擇語句之前嘗試'.ToList()'。 –

+0

如何在FoodItem中定義DiaryEntries? – sachin

+0

什麼是IRepository ?該消息明確指出它應該是導航屬性。 –

回答

1

FoodItem類下面的一個,IEnumerable<T>不支持作爲一種用於導航收集變化:

public class FoodItem 
{ 
    public FoodItem() 
    { 
     this.Measures = new HashSet<Measure>(); 
     this.DiaryEntries = new HashSet<DiaryEntry>(); 
    } 

    public int Id { get; set; } 

    public string Description { get; set; } 

    public virtual ICollection<DiaryEntry> DiaryEntries 
    { 
     get; 
     set; 
    } 

    public virtual ICollection<Measure> Measures 
    { 
     get; 
     set; 
    } 
} 
+0

我做了所有的模型類只有導航屬性,但仍然這個可怕的迴應。 –

+0

您將導航屬性類型從IEnumerable更改爲ICollection? – sachin

+1

看來我必須去睡覺或喝一杯新咖啡。愚蠢的錯誤。謝謝! –