.net C#,实体框架核心-从SP返回由多个表组成的对象

hrirmatl  于 2023-01-06  发布在  .NET
关注(0)|答案(2)|浏览(163)

我需要执行SP,我需要通过SP名称调用SP,并取回对象和返回值。我的问题是我的对象与DB中的多个表有关,我无法用途:Context.ExampleTable.FromSQl(...),因为它只从ExampleTable返回值,但是我需要从3个单独的表中获取字段的对象,以及SP返回值。有人能帮助我吗?我使用的是EntityFrameworkCore 2.2.6
我尝试使用Context.ExampleTable.FromSQl(...),但它不是我需要的。
----编辑----

SqlParameter returnVal = new SqlParameter("@return", SqlDbType.Int);
        returnVal.Direction = ParameterDirection.ReturnValue;

        using (var context = new Context())
        {
            var test = context.Set<RequiredObject>().FromSql("EXEC SP_Name @return", returnVal);
        }
pdsfdshx

pdsfdshx1#

EF Core 2.2.6不再支持。
但是,您可以定义一个表示结果形状的新类,并将其作为DbSet添加到DbContext中,然后在FromSQL中使用这个新类。

q9yhzks0

q9yhzks02#

很好的问题!不幸的是,似乎英孚核心没有这种可能性。
尝试了以下操作:

await db.Database.SqlQueryRaw<SomeComplexModel>("select * from Receivers inner join ... ").ToListAsync()

还有这个

public DbSet<SomeComplexModel> Items { get; set; }
[NotMapped] public class SomeComplexModel { ... }
await db.Items.FromSqlRaw("select * from Receivers inner join ... ").ToListAsync();

两个都失败了...
https://learn.microsoft.com/en-us/ef/core/querying/sql-queries "SQL查询不能包含相关数据。但是,在许多情况下,您可以使用Include运算符在查询之上合成以返回相关数据(请参阅包括相关数据)。"
你肯定可以做什么(我相信这不是最好的方式,可能有人会建议选择更好):在应用程序中额外安装一些微型ORM(例如Dapper),共享相同的数据库连接字符串,在这种罕见情况下,当必须通过纯SQL查询多个相关实体时-不使用EF,而使用此ORM

相关问题