映射具有EF Core中返回的多个结果集的存储过程

时间:2019-07-04 03:46:17

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

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

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

表1

ColumnName1 | ColumnName2 | SomeColumn | AndMoreColumn
_______________________________________________________
Value1      | value 2     | value 3    | Value 4

表1

Column1    | Column2
______________________
value1     | value 2

表3

Column1
Value1

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

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

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

但不幸的是,上述映射无法正常工作。特别是第二张桌子。

2 个答案:

答案 0 :(得分: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

让我知道这个答案是否有用。

答案 1 :(得分:0)

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

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