Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将所有类型的数据库集分配给一个变量_C#_Entity Framework Core - Fatal编程技术网

C# 如何将所有类型的数据库集分配给一个变量

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

是否可以创建一个可以分配所有类型数据库集的变量,然后对该变量执行所有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
}
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的非通用版本。这项功能似乎还没有实现。