2016-11-27 94 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>(); 
}