C# EFCore 3动态数据库集

C# EFCore 3动态数据库集,c#,entity-framework-core,C#,Entity Framework Core,我想向DbContext类声明一个动态DbSet,以便在不指定自定义类的情况下进行自定义原始查询,如下所示: public partial class MyContext: DbContext { public DbSet<dynamic> DynamicEntity { get; set; } 公共部分类MyContext:DbContext { 公共数据库集动态性{get;set;} 如下所示 List<dynamic> dynamicResult = a

我想向DbContext类声明一个动态DbSet,以便在不指定自定义类的情况下进行自定义原始查询,如下所示:

public partial class MyContext: DbContext
{
    public DbSet<dynamic> DynamicEntity { get; set; }
公共部分类MyContext:DbContext { 公共数据库集动态性{get;set;} 如下所示

List<dynamic> dynamicResult = await dbContext.DynamicEntity
.FromSqlInterpolated($@"
    select [col1], [col2], ...
    from table1
    ")
.ToListAsync();
List dynamicResult=wait dbContext.DynamicEntity
.FromSqlInterpolated($@)
选择[col1]、[col2]、。。。
来自表1
")
.ToListAsync();
此配置似乎不起作用,因为我遇到以下运行时错误:

System.InvalidOperationException:在实体类型“object”上定义的键{TempId}CI,而不是“MyCustomView”


如果没有其他库(如dynamicLink),也可以这样做。

您不能像使用DbSet的类型那样使用dynamic

如果要在EF Core中创建自定义SQL查询,可以使用
ExecuteSqlCommand
方法

以下是一个例子:

using(var context = new SampleContext())
{
    var commandText = "INSERT Categories (CategoryName) VALUES (@CategoryName)";
    var name = new SqlParameter("@CategoryName", "Test");
    context.Database.ExecuteSqlRaw(commandText, name);
}

唯一正确的情况是动态不能用作
DbSet
的类型。但是
ExecuteSql
不能用于执行查询和返回结果集,只能使用命令,因此其余的不是解决方案。它无论如何都不存在。感谢您的建议,但是,正如Ivan所说,我正在寻找一个通用解决方案来获取数据集返回