npgsql 연결을 통해 PostgreSQL에서 작동하지 않는 Dapper 매개 변수는 postgres 익명 함수 매개 변수화가 지원됩니까?

c# dapper npgsql postgresql

문제

나는 upsert를하기 위해 작성한 postgres 익명 함수를 매개 변수화하기 위해 dapper를 사용하려고합니다. 코드는 다음과 같습니다.

private static int UpsertProductPrice(
        IDbConnection connection,
        Data.ProductPrice price,
        List<Data.ProductPriceTier> priceTiers)
    {
        string postgres = @"DO $$
        BEGIN 
        UPDATE product_price 
            SET start_date = @StartDate, end_date = @EndDate, price_tier_type = @PriceTierType
            WHERE product_price_external_id = @Id;
        IF found THEN
            RETURN;
        END IF;
        BEGIN
            INSERT INTO product_price(product_price_external_id, start_date, end_date, price_tier_type) 
            VALUES (@Id, @StartDate, @EndDate, @PriceTierType);
            RETURN;
        EXCEPTION WHEN unique_violation THEN END; END$$;";

        int productPriceId = connection.Execute(
            postgres,
            new { Id = price.product_price_external_id, StartDate = price.start_date, EndDate = price.end_date, PriceTierType = price.price_tier_type });

Postgres는 쿼리를 unparameterized로 기록합니다. 여전히 @ 기호가 있고 값이 삽입되지 않았습니다. 여기에 로그가 있습니다.

2015-07-15 14:57:58.570 EDT,"user","TestDb",8496,"::1:53953",55a6ad36.2130,1,"DO",2015-07-15 14:57:58 EDT,9/42,0,ERROR,42703,"column ""startdate"" does not exist",,,"UPDATE product_price 

            SET start_date = @StartDate, end_date = @EndDate, price_tier_type = @PriceTierType

            WHERE product_price_external_id = @Id",52,"PL/pgSQL function inline_code_block line 3 at SQL statement","DO $$

        BEGIN 

        UPDATE product_price 

            SET start_date = @StartDate, end_date = @EndDate, price_tier_type = @PriceTierType

            WHERE product_price_external_id = @Id;

        IF found THEN

            RETURN;

        END IF;

        BEGIN

            INSERT INTO product_price(product_price_external_id, start_date, end_date, price_tier_type) 

            VALUES (@Id, @StartDate, @EndDate, @PriceTierType);

            RETURN;

        EXCEPTION WHEN unique_violation THEN END; END$$;",,,""

내가 잘못했거나 지원되지 않습니까? 이 온라인 작업을 시도하는 사람을 찾을 수 없습니다.

수락 된 답변

익명 코드 블록의 매개 변수는 지원되지 않습니다.이 매개 변수는 Npgsql 기능이 아닌 PostgreSQL 기능입니다. 여기 토론을 참조하십시오 : https://github.com/npgsql/npgsql/issues/629



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