【问题标题】:How to execute SQL query in Entity Framework Core without modifying context class [duplicate]如何在不修改上下文类的情况下在 Entity Framework Core 中执行 SQL 查询 [重复]
【发布时间】:2020-10-14 19:05:33
【问题描述】:

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

        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 字符串查询吗? 任何帮助都是不言而喻的。谢谢!

【问题讨论】:

  • 在链接的问题中进一步查看我的答案

标签: c# sql asp.net asp.net-core entity-framework-core


【解决方案1】:

您可以使用下面的代码。

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

【讨论】:

  • 据我了解,OP 在他的上下文中没有设置ReportModel(或您的ModelClass)。
  • 我已经试过了。实际上,'ReportModel' 是一个自定义类,它不在上下文中。
【解决方案2】:

在您的评论中,您说您遇到了错误:

无法为“ReportModel”创建 DbSet,因为此类型未包含在上下文模型中

错误只是因为您在此处使用的类 ReportModel 显然尚未添加到您的上下文中。你必须这样写:

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

当你写作时

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

您在表上间接查询它。因此,在不修改上下文类的情况下无法执行查询。 Context 类成为从数据库中查询数据的助手。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多