Я читаю Программирование Entity Framework, 2-е издание , и в первой главе есть очень простой запрос:
private static void QueryContacts()
{
using (var context = new SampleEntities())
{
var contacts = context.Contacts.Where(c => c.FirstName == "Robert");
var res = (contacts as ObjectQuery<Contact>).Execute(MergeOption.NoTracking);
foreach (var contact in res)
{
foreach (var address in contact.Addresses)
{
Console.WriteLine("\t{0}", address.City);
}
}
}
Console.Write("Press Enter...");
Console.ReadLine();
}
Когда я подключил SQL Profiler к экземпляру базы данных, я вижу, что был выполнен следующий SQL:
SELECT
[Extent1].[ContactID] AS [ContactID],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
[Extent1].[Title] AS [Title],
[Extent1].[AddDate] AS [AddDate],
[Extent1].[ModifiedDate] AS [ModifiedDate]
FROM [dbo].[Contact] AS [Extent1]
WHERE N'Robert' = [Extent1].[FirstName]
но нет никаких признаков запроса таблицы адресов (хотя адреса есть).
Когда я подключил Entity Framework Profiler, я мог видеть оба:
SELECT [Extent1].[ContactID] AS [ContactID],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName],
[Extent1].[Title] AS [Title],
[Extent1].[AddDate] AS [AddDate],
[Extent1].[ModifiedDate] AS [ModifiedDate]
FROM [dbo].[Contact] AS [Extent1]
WHERE N'Robert' = [Extent1].[FirstName]
и
SELECT [Extent1].[addressID] AS [addressID],
[Extent1].[Street1] AS [Street1],
[Extent1].[Street2] AS [Street2],
[Extent1].[City] AS [City],
[Extent1].[StateProvince] AS [StateProvince],
[Extent1].[CountryRegion] AS [CountryRegion],
[Extent1].[PostalCode] AS [PostalCode],
[Extent1].[AddressType] AS [AddressType],
[Extent1].[ContactID] AS [ContactID],
[Extent1].[ModifiedDate] AS [ModifiedDate]
FROM [dbo].[Address] AS [Extent1]
WHERE [Extent1].[ContactID] = 209 /* @EntityKeyValue1 */
Знаете ли вы, что происходит с SQL Server Profiler, чтобы он не перехватывал запросы к таблице адресов?
Спасибо