2012-12-27 16 views
1

我想創建一個TestMethod,將枚舉我的數據上下文中的表和嘗試讀取每個表的一個記錄。測試的目標是確保我的.dbml文件與底層數據庫同步。我到目前爲止:如何遍歷DataContext中的表和測試讀取記錄?

[TestMethod] 
public void TestDataContextTables() 
{ 
    using (MyDataContext dataContext = new MyDataContext()) 
    { 
     int count = 0; 
     IEnumerable<MetaTable> tableList = dataContext.Mapping.GetTables(); 

     foreach (MetaTable table in tableList) 
     { 
      Debug.Print("Testing " + table.TableName + "..."); 

      // method to restore >= 1 record using LINQ... 
      //Object dummy = from t in dataContext.Mapping.GetTables().Skip(count).Take(1) select t; <-- wrong (1) 
      //Object dummy = from t in dataContext.Mapping.GetTable(table.RowType.GetType()) select t; <-- also wrong (2) 
      //Object dummy = from t in dataContext.Mapping.GetTable(table.RowType.GetType()).GetType() select t; <-- also wrong (3) 

      Debug.Print("OK\n"); 
      count++; 
     } 
    } 
} 

LINQ語句(1)似乎不讀取任何實際數據。 LINQ聲明(2)給我的編譯時錯誤「找不到源型「元表」 」查詢模式的實現,和(3)給出了錯誤「找不到源類型的查詢模式的實現'System.Type'」。後兩種告訴我,我’米指的是薈萃東西時,我應該是指一個東西

我’找的是指每個表DataContext在LINQ語句,並從每個記錄返回一行,以確保一種方式,即LINQ與底層數據庫生成嘲弄的SELECT

回答

0

你可以通過LINQ與select name from sys.tables和使用SqlQuery類(假設你使用的是EF)枚舉表名:

var result = db.Database.SqlQuery("select * from " + yourTableName).ToList(); 
+0

我認爲這將規避很機制我想測試。我想在此測試中驗證的是,作爲我正在部署的項目的一部分的.dbml文件是針對我們開發中的相同版本的數據庫運行的。開發人員有這樣的習慣,即對數據庫進行更改,並且無法在商定的位置記錄此類更改,如部署計劃文檔。我自己是最糟糕的罪犯之一。如果我們忘記隨應用程序一起部署數據庫更改,我希望我的測試功能中斷。 –

+0

好點。你可以嘗試反思你的dbml。爲什麼不建立一個可讀取每個表格的線束?我意識到你將不得不手動編碼。不是傻瓜,但它可能比沒有好。 – andleer