MySql Connector / Net 및 Dapper가있는 매개 변수가 아닌 SQL 변수?

dapper parameters sql

문제

아래 코드는 다음과 같은 오류를 생성합니다.

'@ID'매개 변수를 정의해야합니다.

내가 잘못한 일을하고 있습니까? 아니면 Dapper 매개 변수가 아닌 MySQL에서 SQL 쿼리에 변수를 사용할 수 있습니까?

이 예제에서 @Slug는 Dapper 매개 변수이지만 @ID는 그렇지 않습니다. 저는 MySQL을 사용하고 있으므로 @ID를 정의 할 필요가 없습니다 - 처음 사용시 정의됩니다.

var sql = @"SELECT @ID := id, slug, Title, Text FROM posts WHERE slug = @Slug;  SELECT * FROM comments where postid = @ID;";
using (var connection = GetOpenConnection())
{
    var posts = connection.QueryMultiple(sql, new { Slug = slug })
        .Map<Post, Comment, int>
        (
        Post => Post.ID,
        Comment => Comment.ID,
        (post, comments) => { post.Comments = comments; }
        );
    return posts.FirstOrDefault();
}

수락 된 답변

"MySql Connector / Net"이 오류를 생성합니다.

MySql Connector / Net에서 비 매개 변수 SQL 변수를 사용하려면 연결 문자열에 다음 옵션을 추가해야합니다.

  • "사용자 변수 허용 = True"

참조 : http://blog.tjitjing.com/index.php/2009/05/mysqldatamysqlclientmysqlexception-parameter-id-must-be-defined.html


전문가 답변

나는 이것이 대담한 문제라고 생각하지 않는다. dapper는 사용자가 제공하는 SQL을 가져 와서 SQL에서 분명히 볼 수있는 "args"객체의 멤버를 추가합니다.

이 문제를 조사하는 방법은 DbCommand로 직접 실행하는 것입니다. 제 생각에 그것이 동일하지는 않을 것입니다. SQL 트릭을 사용하면 효과가 있지만 SQL과 트릭 사이에는 차이가 있습니다. 모든 일을하고 있습니다 :

  • 귀하의 SQL과 명령을 만드는
  • "슬러그"라는 매개 변수를 정의하고 값을 설정합니다.
  • sql 호출 및 결과 파싱

그것은 "ID"를 만지지 않으며 그렇게하지 않는 것이 옳습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.