Я запрашиваю базу данных Sqlite, используя EntityFramework.Sqlite 7.0.0-rc1-final
.C# Entity Framework, тот же результат с разными запросами
Следующий метод является кодом в вопросе:
try
{
using (var db = new SfpDb.Ctx())
{
int baneLokId = db.tabStevne.First(a => a.Id == id).BaneLokId;
Console.WriteLine("local baneLokId: " + baneLokId.ToString());
IQueryable<int> baneTypeIds = db.tabBane.Where(o => o.BaneLokId == baneLokId).Select(n => n.BaneTypeId);
List<SfpDb.HovedOvelse> testList = new List<SfpDb.HovedOvelse>();
foreach (int i in baneTypeIds)
{
Console.WriteLine("local baneTypeIds: " + i);
testList.AddRange(db.tabHovedOvelse.Where(p => p.BaneTypeId == i));
foreach (SfpDb.HovedOvelse h in db.tabHovedOvelse.Where(p => p.BaneTypeId == i).OrderBy(k => k.navn))
{
Console.WriteLine("\tlocal HovedOvelseId: " + h.Id + " - " + h.navn);
}
}
return db.tabHovedOvelse.Where(p => baneTypeIds.Contains(p.BaneTypeId)).OrderBy(v => v.navn).ToList();
}
}
Если вызов этого метода дважды с другим входом (ID), первое возвращаемое значение является правильным, но во втором вызове, возвращаемое значение является идентичный первому вызову, независимо от того, что такое вход (id). Однако «testList» содержит правильную информацию во всех вызовах.
Есть ли какой-то кеш, который необходимо очистить при использовании EF?
РЕДАКТИРОВАТЬ
Вызов метода со следующим:
int stevne1 = 1;
int stevne2 = 3;
Console.WriteLine("Input id: " + stevne1);
foreach (SfpDb.HovedOvelse k in getHovedOvelseByStevneId(stevne1))
{
Console.WriteLine("Ret val: HovedOvelseId: " + k.Id + " " + k.navn);
}
Console.WriteLine("Input id: " + stevne2);
foreach (SfpDb.HovedOvelse l in getHovedOvelseByStevneId(stevne2))
{
Console.WriteLine("Ret val: HovedOvelseId: " + l.Id + " " + l.navn);
}
Выход:
Input id: 1
local baneLokId: 2
local baneTypeIds: 2
local HovedOvelseId: 3 - 2-Fri-B
local HovedOvelseId: 6 - 4-Silhuett
local HovedOvelseId: 7 - 5-Standard
local HovedOvelseId: 8 - 6-VM
local HovedOvelseId: 9 - 7-Hurtig
local HovedOvelseId: 10 - 8-NAIS
local baneTypeIds: 3
local HovedOvelseId: 2 - 2-Fri-A
local baneTypeIds: 4
local HovedOvelseId: 1 - 1-Felt
Ret val: HovedOvelseId: 1 1-Felt
Ret val: HovedOvelseId: 2 2-Fri-A
Ret val: HovedOvelseId: 3 2-Fri-B
Ret val: HovedOvelseId: 6 4-Silhuett
Ret val: HovedOvelseId: 7 5-Standard
Ret val: HovedOvelseId: 8 6-VM
Ret val: HovedOvelseId: 9 7-Hurtig
Ret val: HovedOvelseId: 10 8-NAIS
Input id: 3
local baneLokId: 1
local baneTypeIds: 2
local HovedOvelseId: 3 - 2-Fri-B
local HovedOvelseId: 6 - 4-Silhuett
local HovedOvelseId: 7 - 5-Standard
local HovedOvelseId: 8 - 6-VM
local HovedOvelseId: 9 - 7-Hurtig
local HovedOvelseId: 10 - 8-NAIS
local baneTypeIds: 1
local HovedOvelseId: 4 - 3-Luft-AD
local HovedOvelseId: 5 - 3-Luft-BC
Ret val: HovedOvelseId: 1 1-Felt
Ret val: HovedOvelseId: 2 2-Fri-A
Ret val: HovedOvelseId: 3 2-Fri-B
Ret val: HovedOvelseId: 6 4-Silhuett
Ret val: HovedOvelseId: 7 5-Standard
Ret val: HovedOvelseId: 8 6-VM
Ret val: HovedOvelseId: 9 7-Hurtig
Ret val: HovedOvelseId: 10 8-NAIS
И, изменяя входной сигнал на следующее: INT stevne1 = 3; int stevne2 = 1;
Input id: 3
local baneLokId: 1
local baneTypeIds: 2
local HovedOvelseId: 3 - 2-Fri-B
local HovedOvelseId: 6 - 4-Silhuett
local HovedOvelseId: 7 - 5-Standard
local HovedOvelseId: 8 - 6-VM
local HovedOvelseId: 9 - 7-Hurtig
local HovedOvelseId: 10 - 8-NAIS
local baneTypeIds: 1
local HovedOvelseId: 4 - 3-Luft-AD
local HovedOvelseId: 5 - 3-Luft-BC
Ret val: HovedOvelseId: 3 2-Fri-B
Ret val: HovedOvelseId: 4 3-Luft-AD
Ret val: HovedOvelseId: 5 3-Luft-BC
Ret val: HovedOvelseId: 6 4-Silhuett
Ret val: HovedOvelseId: 7 5-Standard
Ret val: HovedOvelseId: 8 6-VM
Ret val: HovedOvelseId: 9 7-Hurtig
Ret val: HovedOvelseId: 10 8-NAIS
Input id: 1
local baneLokId: 2
local baneTypeIds: 2
local HovedOvelseId: 3 - 2-Fri-B
local HovedOvelseId: 6 - 4-Silhuett
local HovedOvelseId: 7 - 5-Standard
local HovedOvelseId: 8 - 6-VM
local HovedOvelseId: 9 - 7-Hurtig
local HovedOvelseId: 10 - 8-NAIS
local baneTypeIds: 3
local HovedOvelseId: 2 - 2-Fri-A
local baneTypeIds: 4
local HovedOvelseId: 1 - 1-Felt
Ret val: HovedOvelseId: 3 2-Fri-B
Ret val: HovedOvelseId: 4 3-Luft-AD
Ret val: HovedOvelseId: 5 3-Luft-BC
Ret val: HovedOvelseId: 6 4-Silhuett
Ret val: HovedOvelseId: 7 5-Standard
Ret val: HovedOvelseId: 8 6-VM
Ret val: HovedOvelseId: 9 7-Hurtig
Ret val: HovedOvelseId: 10 8-NAIS
В первом запросе значения, напечатанные локально в методе, совпадают с значениями, возвращаемыми. Но в последнем запросе это не так. Также возвращаемые значения одинаковы в обоих случаях.
После того как я изменил вход, произошло то же самое. Локальные и возвращаемые значения одинаковы в первом запросе, а возвращаемые значения для обоих запросов одинаковы.
Кроме того, «testList» содержит правильную информацию, но я предпочел бы выполнять запросы, кроме циклов для информации.
Вы можете попробовать var baneTypeIds = db.tabBane.Where (o => o.BaneLokId == baneLokId). Выбрать (n => n.BaneTypeId) .ToList(); –
доказать, что это не проблема с данными ... каково значение id? вам нужно показать подробнее .. –
также, является ли 'BaneLokId' сопоставленным с идентификатором? Есть много возможных причин, но если ваша БД действительна и что идентификатор уникален, тогда этот код будет работать ... поэтому у вас есть больше следственной работы. –