我正在从事一个ASP.NET核心项目。 在那个项目中,我需要执行一个SQL字符串查询,并将结果检索到一个自定义模型。 我尝试使用context.database.sqlquery
检索查询结果。 但ASP.NET核心不支持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-wither-dbset-entity-framework-core,但是,使用这个解决方案,我需要更新我的上下文类。 我不能更新我的上下文类。
在ASP.NET Core3.1中执行SQL字符串查询还有其他方法吗? 任何帮助都是值得赞赏的。 谢谢!
您可以使用下面的代码。
var dataFromDB = context.ModelClass.FromSqlRaw("spName {0}", parameter).ToList();
在最新的EF核心中,你可以尝试下一个:
var listReportModel = context.Set<ReportModel>().FromSqlRaw(customQuery).ToList();
注意下一个限制:
在您的评论中,您说您遇到了一个错误:
无法为“ReportModel”创建DbSet,因为此类型不包括在上下文的模型中
这个错误仅仅是因为您在这里使用的类ReportModel显然没有添加到您的上下文中。 您必须这样写:
public DbSet<ReportModel> ReportModel { get; set; }
当你写作的时候
var dataFromDB = context.ReportModel.FromSqlRaw("spName {0}", parameter).ToList();
您正在表中间接地查询它。 因此,在不修改上下文类的情况下,不可能执行查询。 Context类成为从数据库中查询数据的助手。