2012-11-14 42 views
2

ADO.NET用戶試圖EF首次獲得DbSet 。我試圖從表名稱的字符串中得到一張表.. 比我推測的更難。 Basiclly我在這裏: 從字符串

var tableName = "Name.Entities.Measure" + measureType; 
var table = Activator.CreateInstance("Name.Entities", tableName); 
var unwrapped = table.Unwrap(); 
var type = unwrapped.GetType(); 
var dbset = context.Set<type>(); 

OR

switch (tableString) 
{ 
    case "table1": 
    return GetDataFromTable1(); 
    case "table2": 
    return GetDataFromTable2(); 
} 

更少的代碼將是很好的;)進行擴展方法與所有實體的可搜索的

思考。 更好的解決任何人?

+0

你可能不應該這樣做。這種方法不能返回一個強類型的結果(即,你會得到,說,'IQueryable'而不是IQueryable的''什麼是你正在試圖解決的真正問題? –

+0

@CraigStuntz有幾個表db和javascript的返回返回一個字符串,說明使用哪一個,這是一個服務btw,在ADO.NET中很容易解決, –

回答

3

我在找同樣的東西。試試Set()的非通用版本:

var tableName = "Name.Entities.Measure" + measureType; 
var type = Type.GetType(tableName); 
var dbset = Context.Set(type); 
+0

Thanx,但沒有幫助,沒有得到實體類型。 。字符串,它是實體類型的名稱 所以不管是可怕的開關,或ADO.NET,這是我所知道的選項 –

+0

你沒有的類型更改VAR類型= unwrapped.GetType();? 變種dbset = context.Set ();爲VAR dbset = context.Set(類型); – Ackroydd

+0

好吧,我想我看到的問題,請嘗試以下操作:VAR的tablename = 「Name.Entities.Measure」 + measureType; var type = Type.GetType(tableName); var dbset = Context.Set(type); – Ackroydd