我有一个实体框架上下文,其中包含表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);
}
}
如果没有其他更简洁的方法来实现相同的结果(例如使用反射),我会感到惊讶,但我似乎无法找到一个有用的例子。
有什么想法吗?
答案 0 :(得分:1)
您可以使用非通用DbContext.Set
方法获取相应的DbSet
,然后将其转换为IEnumerable<IEntityModel>
(重要 - 不要使用Cast
方法,而是使用常规C#强制转换操作者):
IEnumerable<IEntityModel> GetAllEntitiesByType(Type entityType)
{
NorthwindEntities en = new NorthwindEntities();
return (IEnumerable<IEntityModel>)en.Set(entityType);
}
答案 1 :(得分:0)
考虑使用通用存储库模式。 Here你可以找到一个例子。
然后在您的存储库中实现GetAllEntitiesByType
函数,如下所示:
IEnumerable<T> GetAllEntitiesByType()
{
return entities.Set<T>();
}