EF4 在(恕我直言)不应该抛出 NotSupported 异常时

发布于 2024-10-20 22:29:14 字数 817 浏览 1 评论 0原文

好吧,这件事让我很困惑。 我有一个表,例如“用户”,其中包含“用户 ID”、“名称”等列。使用 CTP5 将一个对象映射到该表。所以现在我想测试它,并执行以下操作:

List<User> users = new List();
// Some init code here, making say 3 users.
using (UsersDbContext)
{
  // insert users
}

到目前为止一切顺利,工作正常。 现在我想查看记录是否匹配,因此我使用以下代码重新选择用户。

using (UsersDbContext dbc = UsersDbContext.GetDbContext())
{
List<Users> usersRead = dbc.Users.Where(x => x.ID >= users[0].ID && x.ID <= users[users.Count - 1].ID).ToList();
}

这会抛出异常:

System.NotSupportedException:LINQ to 实体无法识别该方法 “用户 get_Item(Int32)”方法,以及 该方法不能转化为 商店表达式。

EF 很难看到我只是要求在 Users[0].ID 中返回一个 int ?
如果我用直接 int 替换对 users[0].ID 的调用 - 工作正常。

我明白它想要做什么,但我认为检查该方法是否属于 .NET 或 Sql Server 应该很容易?

OK, this thing just puzzles me.
I have a table, say Users, with columns UserID, Name, etc. Have an object mapped to it using CTP5. So now I want to test it, and do the following:

List<User> users = new List();
// Some init code here, making say 3 users.
using (UsersDbContext)
{
  // insert users
}

So far so good, works fine.
Now I want to see if the records match, so I select the users back using the following code.

using (UsersDbContext dbc = UsersDbContext.GetDbContext())
{
List<Users> usersRead = dbc.Users.Where(x => x.ID >= users[0].ID && x.ID <= users[users.Count - 1].ID).ToList();
}

This throws and exception:

System.NotSupportedException: LINQ to
Entities does not recognize the method
'User get_Item(Int32)' method, and
this method cannot be translated into
a store expression.

EF has difficulties seeing that I'm just asking to return an int in Users[0].ID ?
If I replace a call to users[0].ID with a straight int - works fine.

I get what it's trying to do, but I thought it should be pretty easy to check if the method belongs to .NET or Sql Server ?

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

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

发布评论

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

评论(1

所有深爱都是秘密 2024-10-27 22:29:14

您正在尝试访问 EF 表达式中的索引器,该表达式不会转换为 SQL 查询。您必须将参数移到查询之外,如下所示:

int first = users[0].ID;
int last = users[users.Count - 1].ID;
List<Users> usersRead = dbc.Users.Where(x => x.ID >= first && x.ID <= last).ToList();

You are trying to access an indexer in an EF expression, which doesn't translate to an SQL query. You'll have to move the parameters outside the query like this:

int first = users[0].ID;
int last = users[users.Count - 1].ID;
List<Users> usersRead = dbc.Users.Where(x => x.ID >= first && x.ID <= last).ToList();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文