EntityFramework 5 дважды обращается к базе данных в одном и том же контексте

В MSDN для Entity Framework 5 метод.ind описывается как:

Использует значение первичного ключа, чтобы попытаться найти объект, отслеживаемый контекстом. Если объект не находится в контексте, то запрос будет выполнен и оценен по данным в источнике данных... 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

1 ответ

Решение

Нашел это:

Поскольку столбец "id" имеет тип long, я должен привести его к нужному типу.

var firstTry = myContext.Artikel.Find((long)20);
var secondTry = myContext.Artikel.Find((long)20);

Теперь все работает как положено.

Другие вопросы по тегам