두 테이블 사이에 INNER JOIN이 포함 된 SELECT 저장 프로 시저와 함께 Dapper를 어떻게 사용할 수 있습니까?

.net c# dapper

문제

Dapper를 처음으로 실험하고 있습니다. 저는 두 개의 테이블을 가지고 있습니다 : 영화와 평점.

CREATE TABLE [dbo].[Films]
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [Title] VARCHAR(250) NOT NULL, 
    [Genre] VARCHAR(50) NOT NULL, 
    [RatingId] INT NOT NULL, 
    CONSTRAINT [FK_Films_To_Ratings] FOREIGN KEY (RatingId) REFERENCES Ratings(Id)
)

CREATE TABLE [dbo].[Ratings]
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [Name] VARCHAR(50) NOT NULL 
)

필자는 Films 테이블의 모든 필름을 반환하고 Ratings 테이블과 조인하는 저장 프로 시저를 작성했습니다. Dapper는 테이블의 FK와 PK 사이에 동일한 이름을 사용하여 테이블을 구조화하면 쉽게 작동합니다.

CREATE PROCEDURE [dbo].[GetFilms]
AS
BEGIN
    SELECT
        F.Id,
        F.Title,
        F.Genre,
        F.RatingId,
        R.Name
    FROM
        dbo.Films as F
    INNER JOIN
        dbo.Ratings as R
    ON
        F.RatingId = R.Id;
END

쿼리가 실행되면 필름 객체가 올바르게 인스턴스화되지만 RatingId는 0으로 설정됩니다 (int는 기본값 0이므로). rating 속성에는 이름이 있지만 ID도 0으로 설정되었습니다.

return this._db.Query<Film, Rating, Film>(
            "dbo.GetFilms",
            (f, r) =>
            {
                f.Rating = r;
                return f;
            },
            splitOn: "RatingId",
            commandType: CommandType.StoredProcedure
            ).ToList();

필자의 예와 같이 열 이름이 동일하지 않은 경우 Dapper 쿼리를 성공적으로 실행하고 정확한 결과를 얻으려면 어떻게해야합니까? Ratings.RatingId 대신 Ratings.Id라는 열이있을 때 테이블 구조가 나에게 깨끗해 보입니다.

수락 된 답변

Dapper는 분할을 시작할 지점에서 속성의 속성을 매핑하려고합니다. 당신은 당신의 쿼리가 다음과 같이 보이길 원하고, 당신은 splitOn을 떼어 낼 수 있습니다.

    SELECT
            F.Id,
            F.Title,
            F.Genre,
--Rating object starts here
            R.Id,
            R.Name
        FROM
            dbo.Films as F
        INNER JOIN
            dbo.Ratings as R
        ON
            F.RatingId = R.Id;


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