是否可以创建一个可以为其分配各种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
}
答案 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>
方法的方法,用于您尝试实现的相同内容。
以下是它支持的方法列表:
为什么要重新发明框架