dra*_*fly 3 .net linq entity-framework sql-server-2008
我正在阅读编程实体框架,第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();
}
Run Code Online (Sandbox Code Playgroud)
当我将SQL事件探查器附加到数据库实例时,我可以看到执行了以下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]
Run Code Online (Sandbox Code Playgroud)
但是没有查询地址表的迹象(即使有地址).
当我附加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]
Run Code Online (Sandbox Code Playgroud)
和
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 */
Run Code Online (Sandbox Code Playgroud)
你知道SQL Server Profiler发生了什么,所以它不会捕获到Address表的查询吗?
谢谢
答对了!
我已经选择了所有事件类型,结果发现Addresses查询可以作为RPC:Completed,而Contact可以作为SQL:BatchCompleted:
exec sp_executesql N'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] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=220
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3475 次 |
最近记录: |