C# 如何将所有类型的数据库集分配给一个变量
是否可以创建一个可以分配所有类型数据库集的变量,然后对该变量执行所有CRUD操作,例如Remove()方法?我尝试了对象类型为的DbSet,但随后出现了编译错误 我的代码:C# 如何将所有类型的数据库集分配给一个变量,c#,entity-framework-core,C#,Entity Framework Core,是否可以创建一个可以分配所有类型数据库集的变量,然后对该变量执行所有CRUD操作,例如Remove()方法?我尝试了对象类型为的DbSet,但随后出现了编译错误 我的代码: DbSet<object> table = null; switch (type) { case "Room": table = context.Rooms; break; case "Subject": table = context.Subjects; break; // tabl
DbSet<object> table = null;
switch (type)
{
case "Room": table = context.Rooms; break;
case "Subject": table = context.Subjects; break;
// table = context.Rooms/Subjects - error
}
DbSet table=null;
开关(类型)
{
案例“房间”:table=context.Rooms;break;
案例“主题”:表格=上下文。主题;中断;
//表=context.Rooms/Subjects-错误
}
嗯,实体框架已经有了一个DbSet
,它是非通用的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>()
var rooms=table.Cast()
<强>更新:(对于EFCULL)为此,您是否考虑过仅仅依赖于<代码> dBrave?您的
DbContext
继承EF Core中的类已具有泛型和非泛型
方法为您试图实现的相同目标匹配DbSet
方法
以下是它支持的方法列表:
- 添加(对象)
- 添加(强度)
- 添加范围(IEnumerable)
- 添加范围(对象[])
- 查找(类型,对象[])
- 查找(对象[])
- 删除(对象)
- 移除(张力)
- 等…
为什么要重新设计框架呢?嗯,实体框架已经有了一个
DbSet
,它是非通用的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>()
var rooms=table.Cast()
<强>更新:(对于EFCULL)为此,您是否考虑过仅仅依赖于<代码> dBrave?您的
DbContext
继承EF Core中的类已具有泛型和非泛型
方法为您试图实现的相同目标匹配DbSet
方法
以下是它支持的方法列表:
- 添加(对象)
- 添加(强度)
- 添加范围(IEnumerable)
- 添加范围(对象[])
- 查找(类型,对象[])
- 查找(对象[])
- 删除(对象)
- 移除(张力)
- 等…
为什么要重新创建框架您可以使用匹配的抽象方法创建基类型。我现在想不出任何其他类型安全的可能性。基类型不起作用,因为EF需要知道映射的类型才能在适当的集合上执行操作。您可以使用匹配的抽象方法创建基类型。我现在想不出任何其他类型安全的可能性。基类型不起作用,因为EF需要知道映射的类型才能在适当的Setb上执行操作,但在我使用的Entity Framework Core中是不可能的,这里不存在DbSet的非泛型版本。这个特性似乎还没有实现,但在我使用的实体框架核心中是不可能的,这里不存在DbSet的非通用版本。这项功能似乎还没有实现。