1

什么会导致这个查询。仅开始投影c而不填充其子集合ParcelValues

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

我正在运行我的应用程序,上面将返回一个result类型的对象,IQueryable<Parcel>其中的属性Request.ParcelValues填充了正确的记录。现在,出于某种原因,无论我如何尝试使用包含,都只会投影 Parcel 字段。

生成的 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'
4

1 回答 1

0

了解您的数据

因此,最终我的整个问题是由实体框架的已知设计功能/错误(取决于您如何看待它)和我的数据引起的。我正在使用 nchar(25) 将我的密钥从表中导入到我的 varchar(16) 表中大多数表我在填充我的目标之前修剪密钥。我忘记修剪似乎永远不会加载的表上的键,除非单独查询。因此,事实证明 EF 不能延迟加载相关表,其中一些在键中有尾随空格(空格也必须匹配)。

一旦我更新了我的脚本以加载我所有的目标无空格。问题解决了。

于 2013-04-01T13:34:30.213 回答