【问题标题】:Stored procedure with multiple recordsets in Entity Framework 6Entity Framework 6 中具有多个记录集的存储过程
【发布时间】:2021-12-23 09:35:09
【问题描述】:

ASP.NET Core 6 Web API、EF 6、C#、SQL Server 2019。我知道如何执行返回记录集的存储过程,利用模型映射,并获取填充的强类型对象集合对应记录。生活如此美好。

有没有办法执行返回多个记录集并接收强类型记录对象集合的存储过程?

我知道如何做到这一点没有实体框架(例如,旧学校 SqlDataAdapter / Dataset,或通过 DataReader 手动解析记录)。

也许有一种方法可以以某种方式将记录集解析逻辑与 EF 中的查询执行逻辑分离,手动执行后者,然后从一系列 DataReader 中填充记录集合?

【问题讨论】:

    标签: entity-framework .net-core entity-framework-6


    【解决方案1】:

    如果您只需要将查询结果映射到您不需要的对象,则需要像 EF Core 6 这样的全功能 ORM。您可以使用像 Dapper 这样的微 ORM 来映射查询结果直接指向对象。

    在最常见的情况下,您可以将查询的结果映射到对象,甚至可以使用以下参数:

    var sql="select * from Products where CategoryId=@category";
    var products=connection.Query<Product>(sql,new {category=123});
    

    您还可以映射多个结果:

    var sql =
    @"
    select * from Customers where CustomerId = @id
    select * from Orders where CustomerId = @id
    select * from Returns where CustomerId = @id";
    
    using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
    {
       var customer = multi.Read<Customer>().Single();
       var orders = multi.Read<Order>().ToList();
       var returns = multi.Read<Return>().ToList();
       ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      相关资源
      最近更新 更多