如何在实体框架核心中执行sql查询而不修改上下文类

bybem2ql  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(541)

我正在做一个asp.net核心项目。在该项目中,我需要执行一个sql字符串查询,并将结果检索到一个自定义模型。我尝试使用 context.Database.SqlQuery<ReportModel> . 但是 Database.SqlQuery asp.net核心不支持。请找到我的代码如下:

public List<ReportModel> GetReportDetails(string customQuery)
        {
            try
            {
                List<ReportModel> listReportModel = new List<ReportModel>();
                var queryResult = context.Database.SqlQuery<ReportModel>(customQuery);
                foreach (var item in queryResult)
                {
                    listReportModel.Add(item);
                }
                return listReportModel;
            }
            catch (Exception ex)
            {
                throw;
            }    
        }

我也尝试了以下答案https://stackoverflow.com/questions/35631903/raw-sql-query-without-dbset-entity-framework-core 但是,使用这个解决方案,我需要更新我的上下文类。我无法更新上下文类。
在asp.net core 3.1中,是否有其他方法执行sql字符串查询?任何帮助都是值得赞赏的。谢谢您!

7ajki6be

7ajki6be1#

您可以使用下面的代码。

var dataFromDB = context.ModelClass.FromSqlRaw("spName {0}", parameter).ToList();
ql3eal8s

ql3eal8s2#

在您的评论中,您说您遇到了一个错误:
无法为“reportmodel”创建dbset,因为上下文的模型中不包含此类型
这个错误仅仅是因为您在这里使用的类reportmodel显然没有添加到您的上下文中。你必须写下:

public DbSet<ReportModel> ReportModel { get; set; }

当你写作的时候

var dataFromDB = context.ReportModel.FromSqlRaw("spName {0}", parameter).ToList();

您正在表上间接查询它。因此,不修改上下文类就不可能执行查询。上下文类成为从数据库查询数据的助手。

axzmvihb

axzmvihb3#

您可以通过context.database属性使用ado.net。
https://www.learnentityframeworkcore.com/raw-sql#leveraging-ado.net-via-the-context.database-property属性
这是一个具体的实现。
https://github.com/dotnet/efcore/issues/2344#issuecomment-172641417

相关问题