![](/img/trans.png)
[英]How can I use Dapper's QueryMultiple with a stored procedure, but with a different parameter value each time?
[英]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.