Почему параметр хранимой процедуры Mysql не найден в коллекции? - PullRequest
1 голос
/ 19 января 2012

У меня проблема с платформой сущностей и MySQL. Я решил проблему с параметрами функции структуры сущности с помощью этого ответа

Но когда я хочу добавить некоторые данные с помощью хранимой процедуры mysql, у меня есть

Параметр 'kick_Prod_StateID' не найден в коллекции.

Ошибка в C #.

Моя процедура, как показано ниже:

CREATE  PROCEDURE CreateState_(

    IN kick_Prod_StateID INT(11),
    IN kick_ShortName VARCHAR(3),
    IN kick_StateName VARCHAR(50)
)

BEGIN INSERT INTO State_
(
    Prod_StateID_,
    ShortName_,
    StateName_
)
VALUES 
( 
    kick_Prod_StateID ,
    kick_ShortName ,
    kick_StateName
) ; 
END$$

и структура сущностей создала код C #, как показано ниже:

public ObjectResult<State_> AddState(Nullable<global::System.Int32> prod_StateID_, global::System.String shortName_, global::System.String stateName_)
    {
        ObjectParameter prod_StateID_Parameter;
        if (prod_StateID_.HasValue)
        {
            prod_StateID_Parameter = new ObjectParameter("Prod_StateID_", prod_StateID_);
        }
        else
        {
            prod_StateID_Parameter = new ObjectParameter("Prod_StateID_", typeof(global::System.Int32));
        }

        ObjectParameter shortName_Parameter;
        if (shortName_ != null)
        {
            shortName_Parameter = new ObjectParameter("ShortName_", shortName_);
        }
        else
        {
            shortName_Parameter = new ObjectParameter("ShortName_", typeof(global::System.String));
        }

        ObjectParameter stateName_Parameter;
        if (stateName_ != null)
        {
            stateName_Parameter = new ObjectParameter("StateName_", stateName_);
        }
        else
        {
            stateName_Parameter = new ObjectParameter("StateName_", typeof(global::System.String));
        }

        return base.ExecuteFunction<State_>("AddState", prod_StateID_Parameter, shortName_Parameter, stateName_Parameter);
    }

Ошибка в этой строке ==>

return base.ExecuteFunction<State_>("AddState", prod_StateID_Parameter, shortName_Parameter, stateName_Parameter);

Как я могу решить эту проблему?

Thx

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Существует другое решение: edmx добавляет или удаляет некоторый контент, например "p_", или удаляет некоторые символы как "kick_" в вашем случае.

убедитесь, что имена параметров в хранимой процедуре и функции edmx остаются одинаковыми. если они разные, сделай их одинаковыми.

MySql Процедура:


CREATE CommentsDelete(TCommentId int)
BEGIN

delete from SmComment where Commentid in
(
select commentid from smcomment where parentid= TCommentId or commentid=TCommentId;
);
END

Первый Edmx создал эту функцию:

public int CommentsDelete(Nullable<global::System.Int32> p_CommentId)
        {
            ObjectParameter p_CommentIdParameter;
            if (p_CommentId.HasValue)
            {
                p_CommentIdParameter = new ObjectParameter("p_CommentId", p_CommentId);
            }
            else
            {
                p_CommentIdParameter = new ObjectParameter("p_CommentId", typeof    (global::System.Int32));
            }

            return base.ExecuteFunction("RecursiveCommentsDelete", p_CommentIdParameter);
        }

я заменяю "p_CommentId" на "TCommentId", теперь это работает нормально для меня

Функция Edmx Designer:

public int CommentsDelete(Nullable<global::System.Int32> p_CommentId)
        {
            ObjectParameter p_CommentIdParameter;
            if (p_CommentId.HasValue)
            {
                p_CommentIdParameter = new ObjectParameter("TCommentId", p_CommentId);
            }
            else
            {
                p_CommentIdParameter = new ObjectParameter("TCommentId", typeof    (global::System.Int32));
            }

            return base.ExecuteFunction("RecursiveCommentsDelete", p_CommentIdParameter);
        }
1 голос
/ 23 января 2012

Я решил проблему.

Проблема была в хранимых параметрах процедуры.

Когда мы используем mysql и сущность Framework вместе, мы должны дать одинаковые имена параметрам таблицы и значения.

Я имею в виду, хранимая процедура должна быть:

CREATE  PROCEDURE CreateState_(

IN Prod_StateID_ INT(11),
IN ShortName_ VARCHAR(3),
IN StateName_ VARCHAR(50)
)

BEGIN INSERT INTO State_
(
Prod_StateID_,
ShortName_,
StateName_
)
VALUES 
( 
Prod_StateID_ ,
ShortName_ ,
StateName_
) ; 
END$$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...