简体   繁体   English

LINQ to Entities查询未投影子集合

[英]LINQ to Entities query not projecting child collections

What would cause this query. 什么会导致此查询。 To start only projecting c without populating its child collection ParcelValues . 只开始投影c而不填充其ParcelValues

var result = (from c in _context.Parcels.Include("ParcelValues")
where c.STRAP == strap
select c);

I was running my app and the above would return a result object of type IQueryable<Parcel> with the property Request.ParcelValues populated with the correct records. 我正在运行我的应用程序,并且上面的代码将返回类型为IQueryable<Parcel>result对象,该对象的属性Request.ParcelValues填充有正确的记录。 Now, for some reason, no matter how I try to use the include, only the Parcel fields are projected. 现在,由于某种原因,无论我如何尝试使用include,都只会投影“包裹”字段。

GENERATED SQL 生成的SQL

exec sp_executesql N'SELECT 
[Project2].[LAND_AREA] AS [LAND_AREA], 
[Project2].[STRAP] AS [STRAP], 
[Project2].[SITUS] AS [SITUS], 
[Project2].[ZIP_CODE] AS [ZIP_CODE], 
[Project2].[MAILING_ADDRESS] AS [MAILING_ADDRESS], 
[Project2].[PROPERTY_USE] AS [PROPERTY_USE], 
[Project2].[SUBDIVISION] AS [SUBDIVISION], 
[Project2].[DSCR] AS [DSCR], 
[Project2].[INCORPORATION] AS [INCORPORATION], 
[Project2].[SEC_TWP_RGE] AS [SEC_TWP_RGE], 
[Project2].[CENSUS] AS [CENSUS], 
[Project2].[WATERFRONT] AS [WATERFRONT], 
[Project2].[C1] AS [C1], 
[Project2].[ID] AS [ID], 
[Project2].[STRAP1] AS [STRAP1], 
[Project2].[YEAR] AS [YEAR], 
[Project2].[LAND] AS [LAND], 
[Project2].[IMPROVEMENT] AS [IMPROVEMENT], 
[Project2].[JUST] AS [JUST], 
[Project2].[ASSESSED] AS [ASSESSED], 
[Project2].[TAXABLE] AS [TAXABLE]
FROM ( SELECT 
    [Limit1].[STRAP] AS [STRAP], 
    [Limit1].[SITUS] AS [SITUS], 
    [Limit1].[ZIP_CODE] AS [ZIP_CODE], 
    [Limit1].[MAILING_ADDRESS] AS [MAILING_ADDRESS], 
    [Limit1].[PROPERTY_USE] AS [PROPERTY_USE], 
    [Limit1].[SUBDIVISION] AS [SUBDIVISION], 
    [Limit1].[DSCR] AS [DSCR], 
    [Limit1].[LAND_AREA] AS [LAND_AREA], 
    [Limit1].[INCORPORATION] AS [INCORPORATION], 
    [Limit1].[SEC_TWP_RGE] AS [SEC_TWP_RGE], 
    [Limit1].[CENSUS] AS [CENSUS], 
    [Limit1].[WATERFRONT] AS [WATERFRONT], 
    [Extent2].[ID] AS [ID], 
    [Extent2].[STRAP] AS [STRAP1], 
    [Extent2].[YEAR] AS [YEAR], 
    [Extent2].[LAND] AS [LAND], 
    [Extent2].[IMPROVEMENT] AS [IMPROVEMENT], 
    [Extent2].[JUST] AS [JUST], 
    [Extent2].[ASSESSED] AS [ASSESSED], 
    [Extent2].[TAXABLE] AS [TAXABLE], 
    CASE WHEN ([Extent2].[ID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
    FROM   (SELECT TOP (1) 
        [Extent1].[STRAP] AS [STRAP], 
        [Extent1].[SITUS] AS [SITUS], 
        [Extent1].[ZIP_CODE] AS [ZIP_CODE], 
        [Extent1].[MAILING_ADDRESS] AS [MAILING_ADDRESS], 
        [Extent1].[PROPERTY_USE] AS [PROPERTY_USE], 
        [Extent1].[SUBDIVISION] AS [SUBDIVISION], 
        [Extent1].[DSCR] AS [DSCR], 
        [Extent1].[LAND_AREA] AS [LAND_AREA], 
        [Extent1].[INCORPORATION] AS [INCORPORATION], 
        [Extent1].[SEC_TWP_RGE] AS [SEC_TWP_RGE], 
        [Extent1].[CENSUS] AS [CENSUS], 
        [Extent1].[WATERFRONT] AS [WATERFRONT]
        FROM [dbo].[PARCELS] AS [Extent1]
        WHERE [Extent1].[STRAP] = @p__linq__0 ) AS [Limit1]
    LEFT OUTER JOIN [dbo].[PARCEL_VALUES] AS [Extent2] ON [Limit1].[STRAP] = [Extent2].[STRAP]
)  AS [Project2]
ORDER BY [Project2].[STRAP] ASC, [Project2].[C1] ASC',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'0001020003'

KNOW THY DATA 了解您的数据

So, it ended up that my whole problem was being caused by a known design feature/bug of the Entity Framework (depending on how you look at it) and my data. 因此,最终我的整个问题是由Entity Framework的一个已知设计功能/错误(取决于您如何看待)和我的数据引起的。 I was importing my keys from tables with nchar(25) into my tables with varchar(16) Most tables I was trimming the key before populating my targets. 我正在将具有nchar(25)的表中的键导入到具有varchar(16)的表中。大多数表在填充目标之前都会对键进行修整。 I had forgotten to trim the key on the tables that would never seem to load, except when queried separately. 我忘记了修剪表上似乎永远不会加载的键,除非单独查询。 So, it turns out EF can't lazy load related tables with some having trailing whitespace in the keys (whitespace must match too). 因此,事实证明,EF不能在键中具有尾随空格的表中延迟加载相关表(空格也必须匹配)。

Once I updated my script to load all my target sans whitespace. 一旦我更新脚本以加载所有目标无空白。 Issue resolved. 问题解决了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM