2014-09-12 65 views
1

我是EF新手,在看了教程之後,好像我可以保存數據就好,但不知道要檢索它的代碼。我的類看起來像用c#實體框架,檢索保存的對象

public class Item 
{ 
    [Key] 
    public int index { get; set; } 
    public string name; 
    public List<string> type; 
    public List<string> def; 
    public HashSet<string> syns; 
    public HashSet<string> generator_list = new HashSet<string>(); 
    public List<Point> related_items2 = new List<Point>(); 
} 

而EF代碼看起來像

using (var ctx = new Context()) 
    { 
     foreach (Item block in items) 
     { 
      ctx.items_db.Add(block); 
     } 
     ctx.SaveChanges(); 

     var test = from b in ctx.items_db 
        orderby b.index 
        select b; 
    } 

我有9000分的情況下,我只是想將它們保存在一個數據庫中,然後將它們恢復成List<Item>與所有的實例。但我認爲我沒有用var test這樣做,因爲那看起來不是List<Item>,我似乎無法在using語句塊之外訪問它。

我這樣做的唯一原因是我只想保存related_items2屬性(所以我不必在每次重新啓動時重新生成它),因爲它有9000個元素,它需要一個同時(20分鐘)生成9000個實例。我試着用protobuff但仍然佔用200MB和我得到的錯誤,當我嘗試讀取數據回。

回答

1

必須使用.ToList()到數據更改爲項目
的列表,如果你不使用.ToList測試變量數據的IQueryable,而不是名單 的使用沒有工作

var test=new List<Item>(); 
using (var ctx = new Context()) 
{ 
    foreach (Item block in items) 
    { 
     ctx.items_db.Add(block); 
    } 
    ctx.SaveChanges(); 

    test = (from b in ctx.items_db 
       orderby b.index 
       select b).ToList(); 
} 
+0

多虧了這一點邊,似乎工作!但我認爲我仍然在做錯事,因爲我期待的是9000個元素的列表,但是我得到了18000個元素,除了索引外,所有的字段都是空白的?我查找刪除表,以便重新開始並排除故障,但需要表名,但我不知道我的情況如何? – thatandrey 2014-09-12 19:47:07

+0

@ user3408097我認爲你的表從開始不是空的,或者你運行這個代碼兩次,因此得到18000個元素的列表 – 2014-09-12 19:52:54

+0

你知道我該如何刪除表嗎?此代碼給我一個錯誤'ctx.Database.ExecuteSqlCommand(「TRUNCATE TABLE [items_db]」);' – thatandrey 2014-09-12 19:58:03