【发布时间】:2015-02-03 10:00:23
【问题描述】:
EDMX 将 ICollection 用于像这样的 1:n 关系
public partial class Customer
{
...
public virtual ICollection<User> Users { get; set; }
ICollection 实现 IEnumerable 而不是 IQueryable,因此使用客户上的属性导航来按站点过滤,从数据库服务器检索所有记录并在客户端过滤它们(这是一个示例,不是真实案例):
var users = myContext.Customer.Users.Where(u.Enabled).FirstOrDefault();
Linq 查询:
SELECT [Extent1].[IdCustomer] AS [IdCustomer],
[Extent1].[Enabled] AS [Enabled],
...
FROM [Framework].[User] AS [Extent1]
我尝试“强制”EF 在运行时将用户设置为可查询,但这不起作用:
var users = myContext.Customer.Users.AsQueryable().Where(u.Enabled).FirstOrDefault();
关于这个问题的两个问题:
- 为什么 AsQueryable 在这种情况下不起作用?
- 为什么 EDMX 使用 ICollection 而不是 DbSet?
- 是否可以使用带有 IQueryable 实现的 DbSet 或专用集合?
【问题讨论】:
标签: c# linq entity-framework iqueryable