【问题标题】:Map stored procedure with multiple resultset returned in EF Core使用 EF Core 中返回的多个结果集映射存储过程
【发布时间】:2019-07-04 03:46:17
【问题描述】:

我目前正在将一个已经建立的网站从旧的 ASP.NET 迁移到 ASP.NET Core 2.2。该数据库是跨其他平台的共享数据库,并且也已建立,因此我不能只更改它的任何内容。

当我不得不从 EF Core 调用一个存储过程时,我遇到了这个问题,该存储过程返回 3 个结果集。存储过程的结果集是这样的。

表 1

ColumnName1 | ColumnName2 | SomeColumn | AndMoreColumns
------------+-------------+------------+---------------
Value1      | value 2     | value 3    | Value 4

表 1

Column1    | Column2
-----------+----------
value1     | value 2

表 3

Column1
-------
Value1

表 1 和表 2 相互关联。此表将始终返回表 1 上的 1 行,表 2 可以返回多行,而表 3 是静态的。

现在,我的问题是。如何将此结果集映射到 EF Core Query<T> 模型构建器?我想按列名映射它,因为我想让列名更友好。我有一个不起作用的例子是这样的。

modelBuilder.Query<MyModel>(a => 
{
    a.Property(b=>b.ModelId).HasColumnName("ColumnName1");
    a.Property(b=>b.ModelName).HasColumnName("ColumnName2");
    ...
});

但不幸的是,上述映射不起作用。尤其是第二张桌子。

【问题讨论】:

    标签: c# asp.net-core entity-framework-core


    【解决方案1】:

    首先,存储过程的结果不是表,我指的是用户表。

    所以,我认为您的问题有两种可能的解决方案:

    1. 使用纯 ADO.NET,执行数据读取器并将结果转换为结果模型

    2. 使用 EF Core 的外部方法

    关于第1点,请阅读这个问题:EF Core query stored procedure map to types

    关于第2点,请阅读这个问题:Working with multiple resultset in .net core

    你也可以阅读这个问题:Support multiple resultsets #8127

    如果这个答案有用,请告诉我。

    【讨论】:

      【解决方案2】:

      在 EF Core 实现类似功能之前,您可能想要这篇文章:

      https://www.danylkoweb.com/Blog/aspnet-core-with-entity-framework-core-returning-multiple-resultsets-OL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-05
        • 2011-04-22
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        相关资源
        最近更新 更多