Контекст: У меня есть решение с 3-х проектамиEntity Framework 6 Проектирования, ПОКО объект возвращаемого типа
Project.Db: Содержит мои DbContext/Хранилище
Project.Core: содержит мои классы POCO (используемых DbContext) ,
Project.Web: Мой проект mvc, который содержит классы отображения viewModels и POCO-ViewModel.
Кажется невозможным, чтобы типизированная проекция возвращала тип объекта EF. В Project.Db У меня есть следующий метод. Я хочу получить два конкретных поля (Имя и идентификатор) регионов и их субрегионов. Я не хочу, чтобы сгенерированный T-SQL выбирал нежелательные поля.
public List<Region> GetRegionsAndSubRegions(){
var regions = Context.Regions.Where(r => condition);
var lightRegions = regions.Select(z => new Region{
RegionName = z.RegionName,
RegionId = z.RegionId
}).ToList();
}
Это поможет мне ошибку
The entity or complex type 'Region' cannot be constructed in a LINQ to Entities query.
Как я нашел, чтобы обойти это:
var lightRegions = regions.ToList().Select(z => new Region{
RegionName = z.RegionName,
RegionId = z.RegionId
}).ToList();
Однако "ToList()" будут выбраны все поля , чего я не хочу.
Я мог бы проецировать класс ViewModel, но я не хочу эту зависимость в Project.Db. Метод должен вернуть список моего объекта POCO (список <Region
>).
Все мои методы репозитория возвращают объекты типа (POCO) в веб-проект.
Есть ли способ сделать это без проецирования на анонимный тип и отобразить его обратно в тип региона (который будет избыточным)? Спасибо
Я не знаю, куда вы хотите поехать, так Я не могу указать вам в правильном направлении. Мне непонятно, зачем вам эти частично заполненные сущности. –
Отредактировано более подробно – BenoitM
Попробуйте следующую технику: http://stackoverflow.com/questions/12916080/the-entity-or-complex-type-cannot-be-constructed-in-a-linq-to-entities-query –