rob*_*nal 5 c# entity-framework-core asp.net-core
我目前正在将一个已经建立的网站从旧的 ASP.NET 迁移到 ASP.NET Core 2.2。该数据库是跨其他平台的共享数据库,也是建立的,因此我不能对其进行任何更改。
当我不得不从 EF Core 调用存储过程时,我遇到了这个问题,该存储过程返回 3 个结果集。存储过程的结果集是这样的。
表格1
ColumnName1 | ColumnName2 | SomeColumn | AndMoreColumns
------------+-------------+------------+---------------
Value1 | value 2 | value 3 | Value 4
Run Code Online (Sandbox Code Playgroud)
表格1
Column1 | Column2
-----------+----------
value1 | value 2
Run Code Online (Sandbox Code Playgroud)
表3
Column1
-------
Value1
Run Code Online (Sandbox Code Playgroud)
表 1 和表 2 相互关联。此表将始终返回表 1 上的 1 行,表 2 可以返回多行,而表 3 是静态的。
现在,我的问题是。如何将此结果集映射到 EF CoreQuery<T>
模型构建器?我想按列名映射它,因为我想让列名更友好。我有一个不起作用的例子是这样的。
modelBuilder.Query<MyModel>(a =>
{
a.Property(b=>b.ModelId).HasColumnName("ColumnName1");
a.Property(b=>b.ModelName).HasColumnName("ColumnName2");
...
});
Run Code Online (Sandbox Code Playgroud)
但不幸的是,上述映射不起作用。特别是对于第二张桌子。
首先,存储过程的结果不是表,我的意思是用户表。
所以,我认为你的问题有两种可能的解决方案:
使用纯 ADO.NET,执行数据读取器并将结果转换为结果模型
使用 EF Core 的外部方法
对于第 1 点,请阅读这个问题:EF Core 查询存储过程映射到类型
对于第 2 点,请阅读这个问题:Working with multiple resultset in .net core
您也可以阅读此问题:Support multiple resultsets #8127
让我知道这个答案是否有用。