在EF Core中返回的多个结果集的MAP存储过程



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

当我不得不从EF核心调用存储过程时,我遇到了这个问题,该过程返回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");
    ...
});

但不幸的是,上述映射不起作用。特别是对于第二个表。

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

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

  1. 与Pure Ado.net一起工作,执行数据读取器并将结果施放为结果模型

  2. 使用EF Core的外部方法

对于第1点,请阅读以下问题:EF核心查询存储过程映射到类型

对于第2点,请阅读以下问题:使用.NET CORE

中的多个结果集

您还可以阅读以下问题:支持多个结果集#8127

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

您可能想要此帖子,直到EF Core实现相似的功能:

https://www.danylkoweb.com/blog/aspnet-core-with-entity-framework-framework-core-core-returning-multiple-resultsetsetsetsetsets-ol

最新更新