我正在使用EntityFramework.Sqlite 7.0.0-rc1-final
查询Sqlite数据库。
以下方法是相关代码:
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”包含正确的信息,但我宁愿执行查询而不是循环查询信息。
答案 0 :(得分:0)
实际上,从
改变IQueryable<int> baneTypeIds = db.tabBane.Where(o => o.BaneLokId == baneLokId).Select(n => n.BaneTypeId);
或
var baneTypeIds = db.tabBane.Where(o => o.BaneLokId == baneLokId).Select(n => n.BaneTypeId);
到
List<int> baneTypeIds = db.tabBane.Where(o => o.BaneLokId == baneLokId).Select(n => n.BaneTypeId).ToList();
解决了这个问题。