EF 4 Code First - проблема при использовании внутреннего запроса - PullRequest
1 голос
/ 14 февраля 2011

У меня проблема с использованием таких запросов с Entity Framework 4 Code First:

var entities = context.TestEntities.Where( e => context.TestEntities2.Count() > 0)

Приведенный выше запрос создаст следующее исключение:

Невозможно создатьпостоянное значение типа 'TestModel.TestEntities2'.В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid).

Тот же код работает, если я использую конструктор моделей и генерирую классы POCO и, таким образом, используюВместо этого ObjectContext.

РЕДАКТИРОВАТЬ: Он работает в консольном приложении, но не при использовании моего хранилища в проекте MVC 3.

РЕДАКТИРОВАТЬ 2: Как насчет этого:

var userProfile = ctx.UserProfiles.Where(p => p.User.Id == user.Id).SingleOrDefault();
return ctx.Feeds.Where( f => ctx.ProfileFollowers.Count() > 0 ).ToList();

Приведенные выше две строки выдают исключение.Закомментирование первой строки решает проблему.Ошибка в DbContext?

//var userProfile = ctx.UserProfiles.Where(p => p.User.Id == user.Id).SingleOrDefault();
return ctx.Feeds.Where( f => ctx.ProfileFollowers.Count() > 0 ).ToList();

Опубликовано в http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/2fb5ceea-9f30-4665-af98-945c6485f60b

1 Ответ

1 голос
/ 15 февраля 2011

Попробуйте метод Any:

var q = context.TestEntities.Where(a=>context.TestEntities2.Any());  

Этот код приводит к предложению EXISTS:

SELECT 
[Extent1].[ProductID] AS [ProductID], 
...
FROM [dbo].[Products] AS [Extent1]
WHERE  EXISTS (SELECT 
1 AS [C1]
FROM [dbo].[Regions] AS [Extent2]

UPD: В случае хранилищ правильный путьвыполнить первый запрос, а затем второй:

if(context.TestEntities2.Count() > 0)  
  var q = context.TestEntities.Select(t=>t);
...