我有一堆具有相同结构的DbSet,因此我可以将它们全部称为MyObject
。在我的EntityFramework中,我有很多看起来相同的实体,但有其他含义。所有实体类型都有6列/字段(相同)。
现在,我如何才能从仅基于DbSet名称的上下文中选择合适的集合?
context.Set(Type type)
不行,因为只要我需要特定的DbSet<OneOfEntities>
,我就无法使用它调用LINQ for Entities。
缺少什么?
更新
我想出了通过使用reflecion来获取实体信息的想法,但它似乎也是一个死胡同,因为我仍无法从代码中确定每个实体的特定数据类型。即使我有表名,例如。 MyObject
和另一个MyObject2
,MyObject3
等。我无法将其转换为EDMX模型中定义的类。我尝试将Type.GetType()
与程序集混合或通过将类名(表名)连接到一个字符串中的命名空间。仍然没有。
答案 0 :(得分:0)
基本上,你有类似的东西:
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
}
我之前使用过它,效果很好!
〜干杯