gpt4 book ai didi

stored-procedures - 使用 Entity Framework Core 2 将原始 SQL 映射存储过程结果到 POCO/DTO

转载 作者:行者123 更新时间:2023-12-01 01:45:54 24 4
gpt4 key购买 nike

我几乎到处寻找,但我很难找到解决方案。我花了一周时间使用存储过程创建了一个非常复杂的计算查询,我想从这个查询中获取结果并将其放入 POCO 类中,类似于我在使用 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 Querying Raw SQL

Raw SQL Query without DbSet - Entity Framework Core

并发现 EF Core 中不再有“免费 sql”了。 FromSQL 基本上将结果投影到在数据库中找到的真实实体中,我不想要它,因为我没有找到具有相同列的表。相反,一种解决方案是扩展 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 列表。

来自 repo 的示例:

 var dbContext = GetDbContext();
dbContext.LoadStoredProc("dbo.SomeSproc")
.WithSqlParam("fooId", 1)
.ExecuteStoredProc((handler) =>
{
var fooResults = handler.ReadToList<FooDto>();
// do something with your results.
});

关于stored-procedures - 使用 Entity Framework Core 2 将原始 SQL 映射存储过程结果到 POCO/DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49525660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com