C# 如何按名称从上下文中选择特定的数据库集

C# 如何按名称从上下文中选择特定的数据库集,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一堆具有相同结构的数据库集,所以我可以将它们都称为MyObject。在我的EntityFramework中,我有许多看起来相同的实体,但有一些其他的含义。所有实体类型都有6个相同的列/字段 现在,如何仅根据DbSet名称从上下文中选择合适的集合 context.Set(Type type) 不正常,因为只要我需要一个特定的数据库集,我就不能为具有它的实体调用LINQ 少了什么 更新: 我提出了使用reflecion获取实体信息的想法,但这似乎也是一条死胡同,因为我仍然无法从代码中确定每个实

我有一堆具有相同结构的数据库集,所以我可以将它们都称为MyObject。在我的EntityFramework中,我有许多看起来相同的实体,但有一些其他的含义。所有实体类型都有6个相同的列/字段

现在,如何仅根据DbSet名称从上下文中选择合适的集合

context.Set(Type type)
不正常,因为只要我需要一个特定的数据库集,我就不能为具有它的实体调用LINQ

少了什么

更新:


我提出了使用reflecion获取实体信息的想法,但这似乎也是一条死胡同,因为我仍然无法从代码中确定每个实体的特定数据类型。即使我有表名,例如MyObject和另一个MyObject2、MyObject3等,我也无法将其转换为EDMX模型中定义的类。我尝试了将Type.GetType与程序集混合使用,或者将类名表名连接到一个字符串中的命名空间。仍然没有。请使用通用存储库方法。请查看此示例:

基本上,你有这样的东西:

public class GenericRepository<TEntity> where TEntity : class
{
    internal SchoolContext context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(SchoolContext context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }
    //Other code
}
public abstract class EntityBase
{
     //Add properties
}
然后使您的实体从此类继承:

public class MyExampleClass : EntityBase
{
     //Add other properties
}
最后,将GenericRepository更改为,以便TEntity成为EntityBase的一种类型:

public class GenericRepository<TEntity> where TEntity : EntityBase
{
    //Reference code from example
}
我以前用过这个,效果很好


~Cheers

你能发布你的模型和数据库上下文吗?如果问题仍然没有解决,我明天会准备一些代码。谢谢你的订婚!现在我只能总结一下,我有多个实际上相同的db表,实际上它们可以存储在一个表中。现在,我只想准备一个REST端点来管理所有的REST端点,除了一些从UI到控制器、服务、存储库的字符串鉴别器……你们不能只做context.Oneof实体吗?我在这里遗漏了什么吗?不完全是,因为我只有UI中的db表名,而且这个名称也是其中一个实体的名称。无论如何,当需要实体时,不可能仅基于类名指向dbset。嗨,我仍然有一个问题,因为在我的控制器中,我调用了引用存储库的服务,但我没有提供特定的dbset。我在哪里以及如何才能得到这个只有类名作为字符串的类型?如果您必须需要一个字符串,那么您可以使用字典。也就是说,我将在控制器中设置一个泛型类型参数,并使用它。在开发应用程序时,我将业务逻辑放在不同的应用程序中,而不是控制器中。这使得将来更容易从一个框架过渡到下一个框架。如果你需要更多信息,请打开与我聊天。