无法使用 SqlQuery 从存储过程中获取数据
Posted
技术标签:
【中文标题】无法使用 SqlQuery 从存储过程中获取数据【英文标题】:Cannot get data from stored procedure with SqlQuery 【发布时间】:2021-06-20 14:39:15 【问题描述】:这是存储过程:
public partial class AddedSP: DbMigration
public override void Up()
CreateStoredProcedure("dbo.GetTopRecommendingUsers"
// These are stored procedure parameters
,null,
// Here is the stored procedure body
@" SET NOCOUNT ON;
BEGIN
SELECT promoter.Id, promoter.Email, promoter.PhoneNumber, promoter.UserName, promoter.FirstName, promoter.LocationId, promoter.RegionId, promoter.ProfilePhotoId, promoter.LastName, COUNT(u.RecommendedById) AS Recommendations
FROM AspNetUsers AS promoter
INNER JOIN AspNetUsers AS u ON u.RecommendedById = promoter.Id
GROUP BY promoter.Id, promoter.Email, promoter.PhoneNumber,promoter.RegionId, promoter.UserName, promoter.LocationId, promoter.ProfilePhotoId, promoter.FirstName, promoter.LastName
ORDER BY COUNT(u.RecommendedById) DESC
END");
public override void Down()
DropStoredProcedure("dbo.GetTopRecommendingUsers");
这是我的课:
public class RecommenderViewModel
public string Id get; set;
public string Email get; set;
public string PhoneNumber get; set;
public string UserName get; set;
public string FirstName get; set;
public string LocationId get; set;
public string RegionId get; set;
public string ProfilePhotoId get; set;
public string LastName get; set;
public int Recommendations get; set;
这是进行调用的方法:
public List<RecommenderViewModel> GetTopRecommendingUsers()
List<RecommenderViewModel> model = new List<RecommenderViewModel>();
using (var context = new ApplicationDbContext())
model = context.Database.SqlQuery<RecommenderViewModel>("GetTopRecommendingUsers").ToList();
return model;
但我在 GetTopRecommendingUsers()
方法的模型变量中得到一个空列表 (Count=0)。
我做错了什么?
【问题讨论】:
也许你没有数据?您是否在 SSMS 中运行过该过程并验证了正确的结果? 我已经在 SSMS 中执行了查询,它返回了大约三行数据 您真的需要对所有这些字段进行分组吗?看来id就够了。 我不知道为什么,但是当我尝试在 SSMS 中执行查询时,它会给我一个错误,添加分组字段可以解决这个问题。 @Steve GROUP BY 是正确的。 SQL 将期望分组查询中的每个输出字段都是聚合的一部分或包含在 GROUP BY 子句中 【参考方案1】:你能显示 ConnectString 吗?可能是我认为您在本地访问另一个与您的数据库名称相同的数据库。
【讨论】:
以上是关于无法使用 SqlQuery 从存储过程中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
EF ef Database.SqlQuery 内部回滚到执行的存储过程
sqlserver 存储过程 使用事务,说明在下边,求大神指教!
Database.SqlQuery 调用具有多个输出参数的存储过程