2016-09-23 2 views
3

Я пытаюсь перечислить некоторые продукты питания с помощью контроллера. Я использую шаблон репозитория с UnitOfWork для данных в другой сборке и ссылаюсь на него в 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 к Entities только инициализаторы, сущности и сущность навигации. Поддерживаются свойства . "

Мой DiaryEntries член в ViewModel является

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

Как определяется DiaryEntries в FoodItem? – 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

Кажется, я должен ложиться спать или выпить новую чашку кофе. Глупая ошибка. Благодаря! –

Смежные вопросы