EF4 在(恕我直言)不应该抛出 NotSupported 异常时
好吧,这件事让我很困惑。 我有一个表,例如“用户”,其中包含“用户 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您正在尝试访问 EF 表达式中的索引器,该表达式不会转换为 SQL 查询。您必须将参数移到查询之外,如下所示:
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: