如何从名称

时间:2017-10-26 17:44:15

标签: c# entity-framework linq

我有一堆具有相同结构的DbSet,因此我可以将它们全部称为MyObject。在我的EntityFramework中,我有很多看起来相同的实体,但有其他含义。所有实体类型都有6列/字段(相同)。

现在,我如何才能从仅基于DbSet名称的上下文中选择合适的集合?

context.Set(Type type)

不行,因为只要我需要特定的DbSet<OneOfEntities>,我就无法使用它调用LINQ for Entities。

缺少什么?

更新

我想出了通过使用reflecion来获取实体信息的想法,但它似乎也是一个死胡同,因为我仍无法从代码中确定每个实体的特定数据类型。即使我有表名,例如。 MyObject和另一个MyObject2MyObject3等。我无法将其转换为EDMX模型中定义的类。我尝试将Type.GetType()与程序集混合或通过将类名(表名)连接到一个字符串中的命名空间。仍然没有。

1 个答案:

答案 0 :(得分:0)

使用通用存储库方法。请查看此示例:https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

基本上,你有类似的东西:

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
}

我已经使用这种方法多年了,它的工作真棒!那样你就不会与EF联系在一起了。请记住,你必须包装你的类,这样你就不会陷入框架。 .NET Core EF非常不同,如果没有包装器,升级会非常困难。

我注意到您对具有相同属性的实体的评论。我会使用这样的抽象类:

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
}

我之前使用过它,效果很好!

〜干杯