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);
Теперь все работает как положено.