Entity Framework Include 和 Select 是一些其他实体

Posted

技术标签:

【中文标题】Entity Framework Include 和 Select 是一些其他实体【英文标题】:Entity Framework Include and Select are gettind some other entities 【发布时间】:2016-10-11 01:59:03 【问题描述】:

我正在使用带有 Northwind 数据库的 Entity Framework 6 最新稳定版本。我写了一个如下的查询。即使我没有包括客户来订购。并且还包括实体 OrderDetails 有 Order(这就像递归)。最终包含的 OrderDetails 实体 Product 具有 Category,即使我没有包含在内。奇怪的是 Supplier 是一个导航属性,但它对于产品是 null 。

另外:LazyLoading 和 ProxyCreationEnabled 为 false

var orders = Context.Orders
            .Include(i => i.Order_Details)
            .Include(i => i.Order_Details.Select(a => a.Product))
            .Where(i => i.EmployeeID == employeeId && i.CustomerID == customerId)
            .ToList();

还有 OrderDetail 的问题

我听不懂什么?

【问题讨论】:

如果供应商为空,则表示您的存储库中不会存在数据 因为我不想要供应商,所以我也不想要类别。如您所见,查询中没有包含 好吧,你没有Include供应商,我们不知道是否一切都设置正确以支持供应商的延迟加载。可能不是。您必须出示您的地图,我们才能对此发表任何看法。 【参考方案1】:

如果您不想从表中获取不需要的数据,您可以进行选择。您可以通过匿名选择或使用视图模型类来完成

 var orders = Context.Orders
            .Include(i => i.Order_Details)
            .Include(i => i.Order_Details.Select(a => a.Product))
            .Where(i => i.EmployeeID == employeeId && i.CustomerID == customerId)
            .Select new
             
                //here you can select the fields which all are you required
             

            .Select new requireddatavm
             
                //here you can select the fields which all are you required
             

在方法语法中,与其他运算符:

.Where(i => i.EmployeeID == employeeId && i.CustomerID == customerId)

,返回包括包含字段在内的整行

【讨论】:

以上是关于Entity Framework Include 和 Select 是一些其他实体的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework Include 和 Select 是一些其他实体

将 Entity Framework 4 中的 Include 与 lambda 表达式一起使用

Entity Framework Core 如何在不使用 Include().ThenInclude() 的情况下从模型中列出一对多从多对多

如何修复 Entity Framework Core 2.0 中的 n+1 问题?

Entity Framework 4.1 两个跟踪查询

Entity Framework 4 相关实体未加载