C# 如何从存储过程接收动态数据
我正在使用EntityFrameworkCore,希望从存储过程接收动态数据。例如:C# 如何从存储过程接收动态数据,c#,entity-framework,asp.net-core,C#,Entity Framework,Asp.net Core,我正在使用EntityFrameworkCore,希望从存储过程接收动态数据。例如: result1FromGetDataMethod = {id=xxx, datetime=xxx, isValid=xxx, ...} result2FromGetDataMethod = {id=xxx, datetime=xxx, otherParamWhichIsNotInResult1=xxx, ...} result3FromGetDataMethod = {completelyOtherParam=
result1FromGetDataMethod = {id=xxx, datetime=xxx, isValid=xxx, ...}
result2FromGetDataMethod = {id=xxx, datetime=xxx, otherParamWhichIsNotInResult1=xxx, ...}
result3FromGetDataMethod = {completelyOtherParam=xxx, ...}
...
我不知道哪些键值对来自数据库,我的业务逻辑也不需要知道。有没有办法从存储过程中获取动态数据?我尝试了以下方法,但没有成功
public class TestContext : DbContext
{
public TestContext(DbContextOptions<TestContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Query<dynamic>();
}
public dynamic GetData(MyRequestOptions searchParams)
{
SqlParameter fromDate = new SqlParameter("from", searchParams.From.ToString("yyyy-MM-dd"));
SqlParameter toDate = new SqlParameter("to", searchParams.To.ToString("yyyy-MM-dd"));
string sqlQuery = "exec procedure @from, @to";
var data = Query<dynamic>()
.FromSql(sqlQuery, fromDate, toDate);
.ToList();
return data;
}
}
公共类TestContext:DbContext
{
公共TestContext(DbContextOptions):基本(选项)
{
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Query();
}
公共动态GetData(MyRequestOptions搜索参数)
{
SqlParameter fromDate=新的SqlParameter(“from”,searchParams.from.ToString(“yyyy-MM-dd”);
SqlParameter toDate=新的SqlParameter(“to”,searchParams.to.ToString(“yyyy-MM-dd”);
字符串sqlQuery=“exec procedure@from,@to”;
var data=Query()
.FromSql(sqlQuery、fromDate、toDate);
.ToList();
返回数据;
}
}
在本例中,“序列不包含元素”会出现错误。如果我在SQL Server上运行该过程,它运行时不会出现问题。我在这个博客上找到了一个解决方案:但是如果我有上千行超过50列,它的速度会相对较慢。对于这种情况,我不推荐使用EF Core。EF的整个要点是一个ORM,它强烈依赖于预定义的类,这些类可以映射到sql表达式,结果映射到对象。考虑一些类似于DPAPER的控件,以更好地控制查询的执行和处理结果。它支持开箱即用的
dynamic
,您可以同时使用EF和Dapper或bare ADO.NET。