如何将各种DbSet分配给一个变量

时间:2017-09-22 16:11:53

标签: c# entity-framework-core

是否可以创建一个可以为其分配各种DbSet的变量,然后可以对该变量进行所有CRUD操作,例如Remove()方法?我已尝试使用对象类型的DbSet,但后来我遇到了编译错误。

我的代码:

DbSet<object> table = null; 

switch (type)
{
    case "Room": table = context.Rooms; break;
    case "Subject": table = context.Subjects; break;
    // table = context.Rooms/Subjects - error
}

1 个答案:

答案 0 :(得分:0)

嗯,实体框架已经有DbSet<object>,这是非通用的DbSet。所有你需要做的就是抛出它,因为DbSet有一个隐式运算符。

DbSet table = null;

switch (type) {
   case "Room": table = (DbSet)context.Rooms; break;
   case "Subject": table = (DbSet)context.Subjects; break;
}

获得DbSet后,如果愿意,可以获得通用版本。

var rooms = table.Cast<Room>()

更新:(对于EFCore)您是否考虑过仅依靠DbContext来实现此目的? EF Core中的DbContext继承类已经具有泛型和非泛型 匹配DbSet<T>方法的方法,用于您尝试实现的相同内容。

以下是它支持的方法列表:

  • 添加(对象)
  • 添加&lt; TEntity&gt;(TEntity)
  • 的AddRange(IEnumerable的&LT;对象&gt;)
  • 的AddRange(对象[])
  • 查找(类型,对象[])
  • 查找与LT; TEntity&GT;(对象[])
  • 删除(对象)
  • 删除&LT; TEntity&GT;(TEntity)已
  • 等...

为什么要重新发明框架