在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 Profiler:
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
答案 0 :(得分:1)
找到它:
由于'id'列的类型为long,我必须将其强制转换为正确的类型。
var firstTry = myContext.Artikel.Find((long)20);
var secondTry = myContext.Artikel.Find((long)20);
现在它按预期工作。