Я использовал надстройку ADO.NET C # POCO Entity Generator для Visual Studio для генерации классов POCO для моих сущностей.
Когда я пытаюсь использовать класс в запросе Linq to Entities, например, приведенном ниже:
var q = from w in entities.Widgets
select new Widget
{
Id = w.Id,
WidgetName = w.WidgetName,
WidgetDescription = w.WidgetDescription
};
return q.ToList();
Я получаю следующее исключение:
«Сущность или сложный тип MyNamespace.Widget 'нельзя создать в запросе LINQ to Entities».
Единственный способ обойти это - использовать анонимный тип, а затем другой запрос LINQ:
var q = from w in entities.Widgets
select new
{
Id = w.Id,
WidgetName = w.WidgetName,
WidgetDescription = w.WidgetDescription
};
var r = from e in q.AsEnumerable()
select new Widget
{
Id = e.Id,
WidgetName = e.WidgetName,
WidgetDescription = e.WidgetDescription
};
return r.ToList();
Это работает, но довольно избыточно. Я понимаю, почему я получаю исключение, но есть ли более элегантный способ обойти это?
Тот факт, что классы POCO генерируются ADO.NET C # POCO Entity Generator, похоже, не связан с этой проблемой; Я попытался использовать свои собственные классы POCO и увидел то же исключение.
Большое спасибо.
EDIT:
Добавлена ссылка на пошаговое руководство по использованию надстройки ADO.NET C # POCO Entity Generator для Visual Studio - http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx