I am querying a Sqlite database using EntityFramework.Sqlite 7.0.0-rc1-final
.
The following method is the code in question:
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();
}
}
If calling this method twice with different input (id), the first return value is correct, but the in the second call, the return value is identical to the first call, regardless what the input (id) is. The "testList" does however contain the correct info in all calls.
Is there some kind of cache that needs to be cleared when using EF?
EDIT
Calling the method with the following:
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);
}
Output:
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
And, changing the input to the following: 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
In the first query the values printed locally in the method is the same as the ones returned. But that is not the case in the latter query. Also the returned values are the same in both cases.
After I changed the input the same thing happened. Local and returned values are the same in the first query, and returned values for both queries are the same.
Also, the "testList" contains the correct info, but I'd rather perform queries than looping for info.
Actually, changing from
IQueryable<int> baneTypeIds = db.tabBane.Where(o => o.BaneLokId == baneLokId).Select(n => n.BaneTypeId);
or
var baneTypeIds = db.tabBane.Where(o => o.BaneLokId == baneLokId).Select(n => n.BaneTypeId);
to
List<int> baneTypeIds = db.tabBane.Where(o => o.BaneLokId == baneLokId).Select(n => n.BaneTypeId).ToList();
resolved the problem.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.