мы искали разницу между отложенной загрузкой и быстрой загрузкой в 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-запроса в обоих сценариях)