2014-08-28 85 views
0

我想知道是否有一種方法可以將我的代碼動態地從上下文返回實體。例如,我使用的是下面的接收所有記錄:動態選擇上下文屬性?

public List<AbandonCode> GetAbandonCodes() 
    { 
     List<AbandonCode> ab; 
     using (DataWarehouseEntities context = new DataWarehouseEntities()) 
     { 
      ab = (from a in context.AbandonCodes select a).ToList<AbandonCode>(); 
     } 
     return ab; 
    } 

什麼IM希望做的就是創建一個類似的helper方法,但我想不出如何設置context.WhatIWantToGet也沒有返回類型。它看起來類似於這樣的:

public List<????> GetAbandonCodes(Type t) 
    { 
     List<t> ab; 
     using (DataWarehouseEntities context = new DataWarehouseEntities()) 
     { 
      ab = (from a in context.???? select a).ToList<t>(); 
     } 
     return ab; 
    } 

我試圖做甚至可能嗎?

回答

1

這裏有幾個不同的選項。這裏是完全通用的一個使用Set < T>方法上的EF背景:

public List<T> GetAbandonCodes<T>() where T : class 
{ 
    List<T> ab; 
    using (DataWarehouseEntities context = new DataWarehouseEntities()) 
    { 
     ab = context.Set<T>().ToList(); 
    } 
    return ab; 
} 

...你會叫這樣的:

var codes = GetAbandonCodes<AbandonCode>(); 

如果你想在一個類型對象傳遞,而不是調用泛型方法,那麼可以使用非泛型Set()。這是一個有點麻煩,因爲你必須將結果強制轉換的東西可用:

public static DbSet GetAbandonCodes(Type t) 
    { 
     DbSet ab; 
     using (DataWarehouseEntities context = new DataWarehouseEntities()) 
     { 
      ab = context.Set(t); 
     } 
     return ab; 
    } 

然後,您可以使用它像這樣:

var codes = GetAbandonCodes(typeof(AbandonCode)).Cast<AbandonCode>().ToList(); 

我建議第一種方法,不過,因爲它是更安全,更易於使用。

+0

噢,'Set',很好。我應該刷新我的EF知識。 – 2014-08-28 01:01:16