EF 4 Code First - 使用内部查询时出现问题

时间:2011-02-14 16:05:24

标签: frameworks entity-framework-4 entity code-first

我在使用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 个答案:

答案 0 :(得分:1)

尝试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);