Итак, я начал добавлять Entity Framework 4 в устаревшее веб-приложение (ASP.NET WebForms).
Для начала я автоматически сгенерировал некоторые объекты из базы данных. Также я хочу применить Repository Pattern.
Существует сущность с именем Visitor
и ее хранилище VisitorRepository
В VisitorRepository у меня есть следующий метод:
public IEnumerable<Visitor> GetActiveVisitors()
{
var visitors =
from v in _context.Visitors
where v.IsActive
select new Visitor
{
VisitorID = v.VisitorID,
EmailAddress = v.EmailAddress,
RegisterDate = v.RegisterDate,
Company = v.Company,
Position = v.Position,
FirstName = v.FirstName,
LastName = v.LastName
};
return visitors.ToList();
}
Обратите внимание, что у посетителя больше свойств, чем у меня, я просто не хочу получать все, потому что есть несколько тяжелых текстовых полей.
Этот список затем привязывается к повторителю, и при попытке сделать <%# Eval('EmailAddress') #%>
он выдает следующее исключение.
The entity or complex type 'Model.Visitor' cannot be constructed in a LINQ to Entities query.
А) Почему это происходит? Как я могу обойти это? Нужно ли мне выбирать анонимный тип, а затем использовать его для частичной инициализации моих объектов ??? Я не хочу делать SELECT *, потому что здесь есть несколько тяжелых текстовых столбцов, которые мне здесь не нужны
B) Почему каждый пример, который я видел, использует «select new» (анонимный объект) вместо инициализации известного типа? Анонимные типы бесполезны, если вы не извлекаете данные и не отображаете их в одном слое. Насколько я знаю, анонимные типы не могут быть возвращены из методов? Так в чем же их смысл ???
Спасибо всем