C# EFCore 3动态数据库集
我想向DbContext类声明一个动态DbSet,以便在不指定自定义类的情况下进行自定义原始查询,如下所示: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
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所说,我正在寻找一个通用解决方案来获取数据集返回