Dapper : 매개 변수를 사용할 수 있습니까?

dapper npgsql parameter-passing

문제

내 응용 프로그램 데이터베이스를 준비하는 코드를 작성 중입니다. 이 코드에는 테이블을 만들 때 몇 가지 반복적 인 SQL 문이 있으며 일부 메서드에서는 숨기려고합니다 (기본 키를 만들고 테이블의 ID를 자동으로 증가시킵니다. 포스트 그레스). 기본 키의 간단한 경우에 대해 먼저 다음과 같은 함수를 작성했습니다.

public void MakePrimaryKey(DbConnection conn, string tblName, string colName)
{
    conn.Execute(@"
ALTER TABLE ""@tblName""
    ADD CONSTRAINT ""@constrName"" PRIMARY KEY(""@colName"")
    ", new { tblName = tblName,
             constrName = tblName + "_pkey",
             colName = colName } );
}

오류와 예외를 둘러싼 많은 작업을 마친 후에는 필자는이 방식으로 매개 변수를 사용하는 것이 실제로 지원되지 않는다는 결론을 내 렸습니다. 따라서 전통적인 string.Format() 호출로 전환하고 모든 것이 잘 수행되었습니다.

그러나 나는 정말로 만족하지 않습니다. 실제로 지원되지 않는 매개 변수를 사용하는 방법입니까? 그렇다면이 매개 변수를 안전하게 사용할 수있는 장소는 무엇입니까? SQL 쿼리의 변수 부분 (예 : 저장 프로 시저 매개 변수를 사용할 수있는 곳) 만?

수락 된 답변

올바르게 기억하면 Dapper는 매개 변수화 된 IDbCommand를 사용하여 쿼리를 실행합니다.

매개 변수화 된 쿼리는 단순히 문자열 바꾸기 작업입니다.

보다 구체적으로 매개 변수화 된 쿼리를 사용하면 쿼리에 매개 변수를 포함하고 해당 매개 변수의 값을 보내고 SQL Server에서 쿼리를 컴파일하고 매개 변수의 값을 전달할 수 있습니다.

원하는 구문을 사용하여 일반 ADO.NET을 사용하여 매개 변수화 된 쿼리를 만들 수없는 경우 Dapper.NET이이를 수행 할 수 없습니다.




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