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

发布于 2024-10-17 11:37:00 字数 1128 浏览 2 评论 0原文

我在 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

I'm having problem using queries like this with Entity Framework 4 Code First:

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

The above query will generate the following exception:

Unable to create a constant value of
type 'TestModel.TestEntities2'. Only
primitive types ('such as Int32,
String, and Guid') are supported in
this context.

The same code works if I use the model designer and generate the POCO-classes and thus using a ObjectContext instead.

EDIT: It works in a console-application but not while using my repository in an MVC 3 project.

EDIT 2: How about this:

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

The above two lines throws the exception. Commenting out the first line solves the problem. Bug in DbContext?

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

Posted to http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/2fb5ceea-9f30-4665-af98-945c6485f60b

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

塔塔猫 2024-10-24 11:37:00

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

Try the Any method:

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

This code results in the EXISTS clause:

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

UPD: In case of repositories the correct way is to execute the first query and then the second one:

if(context.TestEntities2.Count() > 0)  
  var q = context.TestEntities.Select(t=>t);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文