在 MSDN for Entity Framework 5 中,.Find Methode 被描述为:
使用主键值尝试查找上下文跟踪的实体。如果实体不在上下文中,则将执行查询并针对数据源中的数据进行评估... http://msdn.microsoft.com/de-de/library/gg696418(v=vs.103) .aspx
但是,当我在同一上下文中使用“.Find”两次时,它也会两次访问数据库。我认为第一次尝试后,实体存储在上下文中。(一级缓存)我做错了什么?
using (var myContext = new TestDbContext(connectionstring))
{
var firstTry = myContext.Artikel.Find(20);
Trace.WriteLine("First Try:" + firstTry.Id);
var secondTry = myContext.Artikel.Find(20);
Trace.WriteLine("Second Try:" + secondTry.Id);
}
Sql 探查器:
exec sp_executesql N'SELECT TOP (2)
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name]
FROM [dbo].[Artikel] AS [Extent1]
WHERE [Extent1].[Id] = @p0',N'@p0 int',@p0=20
exec sp_executesql N'SELECT TOP (2)
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name]
FROM [dbo].[Artikel] AS [Extent1]
WHERE [Extent1].[Id] = @p0',N'@p0 int',@p0=20