Я работаю над кодом MVC Storefront и пытаюсь следовать пути хранилища, службы и модели, которая является poco, вне контекста dbml / data. На самом деле, за этим довольно легко следить, пока я не начал писать тесты, а вещи терпели неудачу так, как я просто не понимаю.
В моем случае первичный ключ - это уникальный идентификатор вместо поля int. Репозиторий возвращает IQueryable:
public IQueryable<Restaurant> All()
{
return from r in _context.Restaurants select new Restaurant(r.Id)
{
Name = r.Name
};
}
В этом случае Ресторан - это, конечно, Ресторан. Ресторан, а не _контекст. Ресторан. Ресторан.
Фильтрация в классе обслуживания (или в модульных тестах репозитория) против All (), это работает так же, как и ожидалось:
var results = Repository.All().Where(r => r.Name == "BW<3").ToList();
Это прекрасно работает, есть один Model.Restaurant. Теперь, если я попробую то же самое с pkid:
var results = Repository.All().Where(r => r.Id == new Guid("088ec7f4-63e8-4e3a-902f-fc6240df0a4b")).ToList();
Если не удается с:
The member 'BurningPlate.Models.Restaurant.Id' has no supported translation to SQL.
Если видели некоторые похожие посты, где люди говорят, что это потому, что r => r.Id - это [Model.Restaurants] - это уровень класса, о котором слой linq2sql не знает. Для меня это означает, что первая версия тоже не должна работать. Конечно, если мой pk - int, он работает просто отлично.
Что на самом деле здесь происходит? Господь знает, не очень интуитивно иметь одну работу, а другую - нет. Что я недопонимаю?