原始 SQL 将存储过程结果映射到 POCO/DTO 使用 Entity Framework 核心 2
Raw SQL Mapping Stored Procedure Results to POCO/DTO Using Entity Framework Core 2
我几乎到处都找遍了,但我很难找到解决方案。我花了一个星期的时间使用存储过程创建一个极其复杂的计算查询,我想从此查询中获取结果并将其放入 POCO class,类似于我在使用 EF 之前所做的6.
Map Stored Procedure Column names to POCO DTO
基本上是这样的:
var p1 = new SqlParameter { ParameterName = "Param1", Value = 1 };
var p2 = new SqlParameter { ParameterName = "Param2", Value = 2 };
string query = "EXEC Calcs_Selections @Param1, @Param2";
var calcs = context.Database.SqlQuery<CalcViewPOCO>(query, p1, p2).ToList();
我读过在这里找到的文献:
并且发现 EF Core 中不再有 "free sql"。 FromSQL 基本上将结果投影到数据库中找到的真实实体中,这是我不想要的,因为我没有找到具有相同列的 table。相反,一种解决方案是扩展 DBContext,并创建一个新的 DBSet
但我真的不知道该怎么做。我有一个数据库优先模型,并使用了 Scaffold-DbContext:
Getting Started with EF Core on ASP.NET Core with an Existing Database
我不想添加到自动创建的上下文中,在我的例子中是 ProjectAContext,因为如果我对数据库进行更多更改,并且再次 运行 脚手架,它将覆盖我的更改.
虽然我迫不及待地想要新版本的 EF Core 为我所要求的添加功能,但我找到了一个库来帮助我解决这个问题。
https://github.com/snickler/EFCore-FluentStoredProcedure
它允许我获取结果集,并映射到 DTO 列表。
回购中显示的示例:
var dbContext = GetDbContext();
dbContext.LoadStoredProc("dbo.SomeSproc")
.WithSqlParam("fooId", 1)
.ExecuteStoredProc((handler) =>
{
var fooResults = handler.ReadToList<FooDto>();
// do something with your results.
});
我几乎到处都找遍了,但我很难找到解决方案。我花了一个星期的时间使用存储过程创建一个极其复杂的计算查询,我想从此查询中获取结果并将其放入 POCO class,类似于我在使用 EF 之前所做的6.
Map Stored Procedure Column names to POCO DTO
基本上是这样的:
var p1 = new SqlParameter { ParameterName = "Param1", Value = 1 };
var p2 = new SqlParameter { ParameterName = "Param2", Value = 2 };
string query = "EXEC Calcs_Selections @Param1, @Param2";
var calcs = context.Database.SqlQuery<CalcViewPOCO>(query, p1, p2).ToList();
我读过在这里找到的文献:
并且发现 EF Core 中不再有 "free sql"。 FromSQL 基本上将结果投影到数据库中找到的真实实体中,这是我不想要的,因为我没有找到具有相同列的 table。相反,一种解决方案是扩展 DBContext,并创建一个新的 DBSet
但我真的不知道该怎么做。我有一个数据库优先模型,并使用了 Scaffold-DbContext:
Getting Started with EF Core on ASP.NET Core with an Existing Database
我不想添加到自动创建的上下文中,在我的例子中是 ProjectAContext,因为如果我对数据库进行更多更改,并且再次 运行 脚手架,它将覆盖我的更改.
虽然我迫不及待地想要新版本的 EF Core 为我所要求的添加功能,但我找到了一个库来帮助我解决这个问题。
https://github.com/snickler/EFCore-FluentStoredProcedure
它允许我获取结果集,并映射到 DTO 列表。
回购中显示的示例:
var dbContext = GetDbContext();
dbContext.LoadStoredProc("dbo.SomeSproc")
.WithSqlParam("fooId", 1)
.ExecuteStoredProc((handler) =>
{
var fooResults = handler.ReadToList<FooDto>();
// do something with your results.
});