gpt4 book ai didi

c# - 如何将 Dapper 与包含两个表之间的 INNER JOIN 的 SELECT 存储过程一起使用?

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:22 25 4
gpt4 key购买 nike

我是第一次尝试 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)。 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.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;

关于c# - 如何将 Dapper 与包含两个表之间的 INNER JOIN 的 SELECT 存储过程一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29040188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com