1

このクエリの原因は何ですか。c子コレクションを作成せずに投影のみを開始するにはParcelValues

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

私は自分のアプリを実行していましたが、上記のオブジェクトは、プロパティに正しいレコードが入力されたresultタイプのオブジェクトを返します。さて、どういうわけか、インクルードをどのように使用しようとしても、パーセルフィールドのみが投影されます。IQueryable<Parcel>Request.ParcelValues

生成された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

あなたのデータを知っている

そのため、私の問題全体は、Entity Frameworkの既知の設計機能/バグ(見方によって異なります)と私のデータが原因であることが判明しました。nchar(25)を使用したテーブルからvarchar(16)を使用したテーブルにキーをインポートしていました。ほとんどのテーブルでは、ターゲットにデータを入力する前にキーをトリミングしていました。個別に照会する場合を除いて、ロードされないように見えるテーブルのキーをトリミングするのを忘れていました。したがって、EFは、キーに末尾の空白があるテーブルに関連するテーブルを遅延ロードできないことがわかります(空白も一致する必要があります)。

スクリプトを更新して、すべてのターゲットsans空白をロードしたら。問題は解決された。

于 2013-04-01T13:34:30.213 に答える