簡體   English   中英

如何在包含兩個表之間的INNER JOIN的SELECT存儲過程中使用Dapper?

[英]How can I use Dapper with a SELECT stored procedure containing an INNER JOIN between two tables?

我是第一次嘗試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表一起加入。 當我在表的FK和PK之間使用相同的名稱來構造表時,Dapper可以輕松工作。

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)。 等級屬性包含名稱,但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.Id而不是Ratings.RatingId的列時,表結構對我來說看起來更干凈。

Dapper會在您開始分割時嘗試為屬性映射屬性。 您希望查詢如下所示,並且您可以放棄splitOn,因為您是在ID上進行拆分。

    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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM