C# EF DBContext-查询加载的内容超出了我的需要

C# EF DBContext-查询加载的内容超出了我的需要,c#,sql,entity-framework,linq-to-sql,dbcontext,C#,Sql,Entity Framework,Linq To Sql,Dbcontext,我的存储库中有此代码 我想加载带有依赖项的Place对象(它在PlaceCompleteQuery中定义)。类型具有属性TypeTranslations GetPlaceAsync方法应该按Id和源加载Place,并且应该只加载加载类型的一个类型转换实例(调用方法LoadTranslationAsync(…)-此方法实际上只加载一个类型转换实例) 在我对数据库在Managament Studio中执行SQL命令的情况下,结果只有一行。SQL命令不包含任何类型转换 执行查询之前的我的上下文: 以

我的存储库中有此代码

我想加载带有依赖项的Place对象(它在PlaceCompleteQuery中定义)。类型具有属性TypeTranslations

GetPlaceAsync方法应该按Id和源加载Place,并且应该只加载加载类型的一个类型转换实例(调用方法LoadTranslationAsync(…)-此方法实际上只加载一个类型转换实例)

在我对数据库在Managament Studio中执行SQL命令的情况下,结果只有一行。SQL命令不包含任何类型转换

执行查询之前的我的上下文:

以及我执行查询后的结果变量:


我的问题是,是什么导致了这种不想要的行为?

可能是懒惰加载在某个地方。您是否明确禁用了延迟加载?我没有。当惰性加载被禁用时,它会像我预期的那样工作。那么这对您来说是一个可行的解决方案吗?目前它是一个足够的解决方案。也许我会回来研究为什么我的模型在将来会倾向于延迟加载。
    private IQueryable<Place> placeCompleteQuery;
    protected IQueryable<Place> PlaceCompleteQuery
    {
        get
        {
            return this.placeCompleteQuery ?? (this.placeCompleteQuery = this.DbContext.Places.Include(p => p.Address)
                .Include(p => p.CreatedBy)
                .Include(p => p.Source)
                .Include(p => p.Type)
                .Include(p => p.ExternalMappings));
        }
    }

    public async Task<Place> GetPlaceAsync(string id, string source, int languageId)
    {
        IQueryable<Place> query =
            PlaceCompleteQuery.Where(p => p.ExternalMappings.Any(m => m.Source.Name.ToLower() == source.ToLower() && m.ExternalId == id));

        Place result = await query.SingleOrDefaultAsync();

        await this.LoadTranslationsAsync(languageId, result);

        return result;
    }

    private async Task LoadTranslationsAsync(int languageId, Place result)
    {
        await this.DbContext.PlaceTypeTranslations.Where(t => t.LanguageId == languageId && t.PlaceTypeId == result.Type.Id)
            .LoadAsync();
    }
exec sp_executesql N'SELECT 
  [Project3].[Id] AS [Id], 
  [Project3].[Discriminator] AS [Discriminator], 
  [Project3].[Name] AS [Name], 
  [Project3].[PlaceTypeId] AS [PlaceTypeId], 
  [Project3].[SourceId] AS [SourceId], 
  [Project3].[AddressId] AS [AddressId], 
  [Project3].[CreateByUserId] AS [CreateByUserId], 
  [Project3].[Location] AS [Location], 
  [Project3].[AvgRate] AS [AvgRate], 
  [Project3].[Url] AS [Url], 
  [Project3].[Mail] AS [Mail], 
  [Project3].[Phone] AS [Phone], 
  [Project3].[CreateDate] AS [CreateDate], 
  [Project3].[Id1] AS [Id1], 
  [Project3].[Street] AS [Street], 
  [Project3].[StreetNo] AS [StreetNo], 
  [Project3].[City] AS [City], 
  [Project3].[PostalCode] AS [PostalCode], 
  [Project3].[Country] AS [Country], 
  [Project3].[Id2] AS [Id2], 
  [Project3].[Name1] AS [Name1], 
  [Project3].[NickName] AS [NickName], 
  [Project3].[CreateDate1] AS [CreateDate1], 
  [Project3].[Id3] AS [Id3], 
  [Project3].[Name2] AS [Name2], 
  [Project3].[Description] AS [Description], 
  [Project3].[C1] AS [C1], 
  [Project3].[Id4] AS [Id4], 
  [Project3].[PlaceId] AS [PlaceId], 
  [Project3].[ExternalId] AS [ExternalId], 
  [Project3].[SourceId1] AS [SourceId1]
  FROM ( SELECT 
      [Limit1].[Id] AS [Id], 
      [Limit1].[Name] AS [Name], 
      [Limit1].[PlaceTypeId] AS [PlaceTypeId], 
      [Limit1].[SourceId] AS [SourceId], 
      [Limit1].[AddressId] AS [AddressId], 
      [Limit1].[CreateByUserId] AS [CreateByUserId], 
      [Limit1].[Location] AS [Location], 
      [Limit1].[AvgRate] AS [AvgRate], 
      [Limit1].[Url] AS [Url], 
      [Limit1].[Mail] AS [Mail], 
      [Limit1].[Phone] AS [Phone], 
      [Limit1].[CreateDate] AS [CreateDate], 
      [Limit1].[Discriminator] AS [Discriminator], 
      [Limit1].[Id1] AS [Id1], 
      [Limit1].[Street] AS [Street], 
      [Limit1].[StreetNo] AS [StreetNo], 
      [Limit1].[City] AS [City], 
      [Limit1].[PostalCode] AS [PostalCode], 
      [Limit1].[Country] AS [Country], 
      [Limit1].[Id2] AS [Id2], 
      [Limit1].[Name1] AS [Name1], 
      [Limit1].[NickName] AS [NickName], 
      [Limit1].[CreateDate1] AS [CreateDate1], 
      [Limit1].[Id3] AS [Id3], 
      [Limit1].[Name2] AS [Name2], 
      [Limit1].[Description] AS [Description], 
      [Extent7].[Id] AS [Id4], 
      [Extent7].[PlaceId] AS [PlaceId], 
      [Extent7].[ExternalId] AS [ExternalId], 
      [Extent7].[SourceId] AS [SourceId1], 
      CASE WHEN ([Extent7].[Id] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
      FROM   (SELECT TOP (2) 
          [Extent1].[Id] AS [Id], 
          [Extent1].[Name] AS [Name], 
          [Extent1].[PlaceTypeId] AS [PlaceTypeId], 
          [Extent1].[SourceId] AS [SourceId], 
          [Extent1].[AddressId] AS [AddressId], 
          [Extent1].[CreateByUserId] AS [CreateByUserId], 
          [Extent1].[Location] AS [Location], 
          [Extent1].[AvgRate] AS [AvgRate], 
          [Extent1].[Url] AS [Url], 
          [Extent1].[Mail] AS [Mail], 
          [Extent1].[Phone] AS [Phone], 
          [Extent1].[CreateDate] AS [CreateDate], 
          [Extent1].[Discriminator] AS [Discriminator], 
          [Extent2].[Id] AS [Id1], 
          [Extent2].[Street] AS [Street], 
          [Extent2].[StreetNo] AS [StreetNo], 
          [Extent2].[City] AS [City], 
          [Extent2].[PostalCode] AS [PostalCode], 
          [Extent2].[Country] AS [Country],   
          [Extent3].[Id] AS [Id2], 
          [Extent3].[Name] AS [Name1], 
          [Extent3].[NickName] AS [NickName], 
          [Extent3].[CreateDate] AS [CreateDate1], 
          [Extent4].[Id] AS [Id3], 
          [Extent4].[Name] AS [Name2], 
          [Extent4].[Description] AS [Description]
          FROM    [dbo].[Places] AS [Extent1]
          INNER JOIN [dbo].[Addresses] AS [Extent2] ON [Extent1].[AddressId] = [Extent2].[Id]
          INNER JOIN [dbo].[Users] AS [Extent3] ON [Extent1].[CreateByUserId] = [Extent3].[Id]
          INNER JOIN [dbo].[Sources] AS [Extent4] ON [Extent1].[SourceId] = [Extent4].[Id]
          WHERE ([Extent1].[Discriminator] IN (N''PlaceDto'',N''Place'')) AND ( EXISTS (SELECT 
              1 AS [C1]
              FROM  [dbo].[ExternalMappings] AS [Extent5]
              INNER JOIN [dbo].[Sources] AS [Extent6] ON [Extent5].[SourceId] = [Extent6].[Id]
              WHERE ([Extent1].[Id] = [Extent5].[PlaceId]) AND ((((LOWER([Extent6].[Name])) = (LOWER(@p__linq__0))) AND ( NOT ((LOWER([Extent6].[Name]) IS NULL) OR (LOWER(@p__linq__0) IS NULL)))) OR ((LOWER([Extent6].[Name]) IS NULL) AND (LOWER(@p__linq__0) IS NULL))) AND ([Extent5].[ExternalId] = @p__linq__1) AND (@p__linq__1 IS NOT NULL)
        )) ) AS [Limit1]
   LEFT OUTER JOIN [dbo].[ExternalMappings] AS [Extent7] ON [Limit1].[Id] = [Extent7].[PlaceId]
)  AS [Project3]
  ORDER BY [Project3].[Id] ASC, [Project3].[Id1] ASC, [Project3].[Id2] ASC, [Project3].[Id3] ASC, [Project3].[PlaceTypeId] ASC, [Project3].[C1] ASC',N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'FourSquare',@p__linq__1=N'1'