Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Asp.net Core - Fatal编程技术网

C# 如何从存储过程接收动态数据

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=

我正在使用EntityFrameworkCore,希望从存储过程接收动态数据。例如:

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。