Итак, я начал добавлять Entity Framework 4 в устаревшее веб-приложение (ASP.NET WebForms).
Для начала я автоматически сгенерировал некоторые объекты из базы данных. Также я хочу применить шаблон репозитория.
Существует объект с именем 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();
}
Обратите внимание, что у посетителя больше свойств, чем те, я просто не хочу получать все, потому что есть несколько тяжелых полей TEXT.
Затем этот список привязывается к повторителю, и при попытке выполнить <%# Eval('EmailAddress') #%>
он выдает следующее исключение.
The entity or complex type 'Model.Visitor' cannot be constructed in a LINQ to Entities query.
А) Почему это происходит? Как я могу обойти это? Нужно ли мне выбирать анонимный тип, а затем использовать его для частичной инициализации моих сущностей??? Я не хочу делать SELECT *, потому что здесь есть несколько тяжелых столбцов TEXT, которые мне не нужны
Б) Почему в каждом примере, который я видел, используется "выбрать новый" (анонимный объект) вместо инициализации известного типа? Анонимные типы бесполезны, если вы не извлекаете данные и не показываете их в том же слое. Насколько я знаю, анонимные типы нельзя возвращать из методов? Так какой в них смысл???
Спасибо вам всем