Entity framework EntityFramework 5在同一上下文中两次命中数据库

Entity framework EntityFramework 5在同一上下文中两次命中数据库,entity-framework,.net-4.0,first-level-cache,Entity Framework,.net 4.0,First Level Cache,在实体框架5的MSDN中.Find方法描述为: 使用主键值尝试查找上下文跟踪的实体。如果实体不在上下文中,则将根据数据源中的数据执行和评估查询。。。 但是,当我在同一上下文中两次使用“.Find”时,它也会两次命中数据库。 我认为在第一次尝试之后,实体存储在上下文中。(一级缓存) 我错了什么 using (var myContext = new TestDbContext(connectionstring)) { var firstTry = myContext.Artikel.Fin

在实体框架5的MSDN中.Find方法描述为:

使用主键值尝试查找上下文跟踪的实体。如果实体不在上下文中,则将根据数据源中的数据执行和评估查询。。。

但是,当我在同一上下文中两次使用“.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
找到它:

由于'id'列的类型为long,因此我必须将其转换为正确的类型

var firstTry = myContext.Artikel.Find((long)20);
var secondTry = myContext.Artikel.Find((long)20);
现在,它的工作如预期