2016-11-27 121 views
1

的EF模型DbSet的內容我有表EntityTypeA,EntityTypeB ... EntityTypeZ實體框架上下文。我想創建一個返回IEnumerable的IEntityModel的方法,換句話說就是上面列出的表格的內容。返回基於類型

我現在有一個開關,其根據作爲參數提供的類型,返回對應的表的內容。

請考慮下面的代碼,我試圖因式分解:

IEnumerable<IEntityModel> GetAllEntitiesByType(Type entityType) 
{ 
    NorthwindEntities en = new NorthwindEntities(); 
    switch (entityType.Name) 
    { 
     case "EntitiesTypeA": 
      return en.EntitiesTypeA; 
     // all types in between 
     case "EntitiesTypeZ": 
      return en.EntitiesTypeZ; 
     default: 
      throw new ArgumentException("Unknown model type: " + entityType); 
    } 
} 

如果沒有其他來達到相同的結果(通過使用例如反射)更簡潔的方式,我會感到很驚訝,但我似乎無法找到一個有用的例子。

有什麼想法嗎?

回答

1

可以使用非通用DbContext.Set方法來獲得相應的DbSet,然後將其轉換爲IEnumerable<IEntityModel>(重要 - 不使用Cast方法,但常規的C#轉換操作符):

IEnumerable<IEntityModel> GetAllEntitiesByType(Type entityType) 
{ 
    NorthwindEntities en = new NorthwindEntities(); 
    return (IEnumerable<IEntityModel>)en.Set(entityType); 
} 
+0

感謝伊萬!這工作得很好。 – azazaz

0

考慮使用一般的倉庫模式。 Here你可以找到一個例子。

然後實現GetAllEntitiesByType功能在你的倉庫是這樣的:

IEnumerable<T> GetAllEntitiesByType() 
{ 
    return entities.Set<T>(); 
}