2015-12-27 2 views
0

Я запрашиваю базу данных 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» содержит правильную информацию, но я предпочел бы выполнять запросы, кроме циклов для информации.

+0

Вы можете попробовать var baneTypeIds = db.tabBane.Where (o => o.BaneLokId == baneLokId). Выбрать (n => n.BaneTypeId) .ToList(); –

+1

доказать, что это не проблема с данными ... каково значение id? вам нужно показать подробнее .. –

+0

также, является ли 'BaneLokId' сопоставленным с идентификатором? Есть много возможных причин, но если ваша БД действительна и что идентификатор уникален, тогда этот код будет работать ... поэтому у вас есть больше следственной работы. –

ответ

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(); 

проблема решена.

Смежные вопросы