我正在阅读《Programming Entity Framework, 2nd Edition》一书,其中第一章节有一个非常简单的查询:
当我将SQL Profiler附加到数据库实例时,可以看到执行了以下SQL:
我正在阅读《编程Entity Framework,第二版》,第一章中有一个非常简单的查询:
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]
and
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 为什么不能捕获 Address 表的查询吗?
谢谢。