无法使用 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 存储过程 使用事务,说明在下边,求大神指教!

mysql-数据获取过程

Database.SqlQuery 调用具有多个输出参数的存储过程

必须使用 dbcontext.Database.SqlQuery 声明标量变量“@custid”?

实体框架代码优先 - 为 SqlQuery 配置映射