从代码调用时,Mysql存储过程结果不同

时间:2017-11-20 02:39:16

标签: c# mysql entity-framework

我正在使用EF 6.0和Mysql。我的存储过程是

delimiter $$
use ge_wv8g73$$
CREATE PROCEDURE Get_UserMapSelections(IN p_userId int)
BEGIN

SELECT @DefaultMap := ValueLong FROM userselections WHERE section = 'Last 
Selections' and userid = p_userId and Description like 'LastSelectedMapID';

SELECT CONCAT(

(SELECT IFNULL( 
@DefaultMap ,'0')
) ,',', (

SELECT ValueLong FROM userselections where section = 'Last Selections' and userid = p_userId
and Description like concat('MapPage', @DefaultMap)),',',(

SELECT ValueLong FROM userselections where section = 'Last Selections' and userid = p_userId
and Description like concat('MapRow', @DefaultMap)),',',(

SELECT ValueLong FROM userselections where section = 'Last Selections' and userid = p_userId
and Description like concat('MapCol', @DefaultMap))) as selections;

END$$

当我在mysql workbench中调用它时,它会返回不同的结果

59,147,8,579

但是当我使用EF通过代码调用它时,结果只有 59

GE_Context.cs

 public string Get_UserMapSelections(int userId)
    {
        StringBuilder spCommand = new StringBuilder();

        MySqlParameter[] mySqlParams = new MySqlParameter[] { new MySqlParameter("p_userId", userId)
                                                            };

        spCommand.Append("CALL Get_UserMapSelections(@p_userId);");

        try
        {
            return this.Database.SqlQuery<string>(spCommand.ToString(), mySqlParams).First();
        }
        catch { return null; }
    }

可能是什么问题?有时它发生在我使用参数名称与表中的字段名称相同之前,例如,如果我使用了

select * from maps where userid = userid

但这不是这种情况。

2 个答案:

答案 0 :(得分:2)

您的EF框架代码:

  

返回this.Database.SqlQuery(spCommand.ToString(),mySqlParams)。 First();

您只返回第一个行。因此,您只得到1个结果

答案 1 :(得分:0)

我想分享我到底做了什么。

所以我的存储过程返回了两个我没有注意到的结果集,但同时只在代码中收到了第一个结果集。所以我不能做像

这样的事情
return this.Database.SqlQuery<string>(spCommand.ToString(), mySqlParams).ElementAt(1);

我已按如下方式更改了我的存储过程

CREATE PROCEDURE Get_UserMapSelections(IN p_userId int)
BEGIN

SET @DefaultMap := (SELECT ValueLong FROM userselections WHERE section = 'Last Selections' and userid = p_userId and Description like 'LastSelectedMapID');

SELECT CONCAT(

(SELECT IFNULL( 
@DefaultMap ,'0')
) ,',', (

SELECT ValueLong FROM userselections where section = 'Last Selections' and userid = p_userId
and Description like concat('MapPage', @DefaultMap)),',',(

SELECT ValueLong FROM userselections where section = 'Last Selections' and userid = p_userId
and Description like concat('MapRow', @DefaultMap)),',',(

SELECT ValueLong FROM userselections where section = 'Last Selections' and userid = p_userId
and Description like concat('MapCol', @DefaultMap))) as selections;

END$$

所以这是在查询中添加括号并使用SET而不是SELECT

的问题