根据类型

时间:2016-11-27 10:48:45

标签: entity-framework reflection

我有一个实体框架上下文,其中包含表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);
    }
}

如果没有其他更简洁的方法来实现相同的结果(例如使用反射),我会感到惊讶,但我似乎无法找到一个有用的例子。

有什么想法吗?

2 个答案:

答案 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>();
}