Ленивая загрузка загружает свойства навигации без запроса SQL? - PullRequest
0 голосов
/ 28 октября 2018

мы искали разницу между отложенной загрузкой и быстрой загрузкой в ​​Entity Framework.мы искали SQL-запрос, который создает объект.у нас есть модель провинции, подобная этой:

public class Province
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MaxLength(150)]
    public string Name { get; set; }

    public int CountryId { get; set; }

    public virtual Country Country { get; set; }
    public virtual IList<City> City { get; set; }
}

, если мы используем С готовностью загружаем , и мы хотели, чтобы свойство Country и свойство City были заполнены данными, тогда Entity создает и SQL-запрос, подобный этому (мы используем .include ("PropertyName Or Expression") для загрузки страны и города):

SELECT 
[Project1].[Id] AS [Id], 
[Project1].[Name] AS [Name], 
[Project1].[CountryId] AS [CountryId], 
[Project1].[Id1] AS [Id1], 
[Project1].[Name1] AS [Name1], 
[Project1].[C1] AS [C1], 
[Project1].[Id2] AS [Id2], 
[Project1].[Name2] AS [Name2], 
[Project1].[ProvinceId] AS [ProvinceId]
FROM ( SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Name] AS [Name], 
    [Extent1].[CountryId] AS [CountryId], 
    [Extent2].[Id] AS [Id1], 
    [Extent2].[Name] AS [Name1], 
    [Extent3].[Id] AS [Id2], 
    [Extent3].[Name] AS [Name2], 
    [Extent3].[ProvinceId] AS [ProvinceId], 
    CASE WHEN ([Extent3].[Id] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
    FROM   [dbo].[Province] AS [Extent1]
    INNER JOIN [dbo].[Country] AS [Extent2] ON [Extent1].[CountryId] = [Extent2].[Id]
    LEFT OUTER JOIN [dbo].[City] AS [Extent3] ON [Extent1].[Id] = [Extent3].[ProvinceId]
)  AS [Project1]
ORDER BY [Project1].[Id] ASC, [Project1].[Id1] ASC, [Project1].[C1] ASC

, а когда мы используем Ленивая загрузка , он генерирует SQL-запросы наподобиеэто:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Extent1].[CountryId] AS [CountryId]
    FROM [dbo].[Province] AS [Extent1]

и у нас все еще есть доступ к стране и городу для провинции.у меня вопрос как Lazy Loading может заполнить страну и город, не упоминая их в SQL-запросе? (мы использовали и Visual Studio, и SQL Profiler для получения SQL-запроса в обоих сценариях)

...