C# 使用Dapper从多个表查询数据
我有一个数据库表GTL_TITLES,它有两个外键AuthorId和PublisherId。如果要从数据库中查询标题,还需要从AUTHOR和PUBLISHER表中获取信息。为此,我创建了一个存储过程,用于连接所有三个表并选择以下列: 我的GtlTitle模型类如下所示:C# 使用Dapper从多个表查询数据,c#,sql-server,api,.net-core,dapper,C#,Sql Server,Api,.net Core,Dapper,我有一个数据库表GTL_TITLES,它有两个外键AuthorId和PublisherId。如果要从数据库中查询标题,还需要从AUTHOR和PUBLISHER表中获取信息。为此,我创建了一个存储过程,用于连接所有三个表并选择以下列: 我的GtlTitle模型类如下所示: public string ISBN { get; set; } public string VolumeName { get; set; } public string TitleDescription { get; set;
public string ISBN { get; set; }
public string VolumeName { get; set; }
public string TitleDescription { get; set; }
public string PublisherName { get; set; }
public DateTime PublicationDate { get; set; }
public Author TitleAuthor { get; set; }
public Publisher Publisher { get; }
正如您可能猜到的,类Author有两个字符串:FirstName和LastName,Publisher有PublisherName
也就是说,这是调用数据库的方法:
public GtlTitle GetTitle(string ISBN)
{
using (var connection = new SqlConnection(_connection))
{
connection.Open();
return connection.QuerySingle<GtlTitle>("GetTitleByISBN", new { ISBN }, commandType: CommandType.StoredProcedure);
}
}
并返回以下内容:{isbn:978-0-10074-5,volumeName:volumeName-97581,titleDescription:Description-97581,publisherName:Publisher-714,发布日期:2020-05-23T00:00:00,titleAuthor:null,Publisher:null}
如您所见,titleAuthor和publisher为null。我怎样才能解决这个问题?我是否需要在GtlTitle模型类中编写公共字符串FirstName之类的字段,或者是否有填充作者和发布者的方法
此外?Dapper还支持使用splitOn参数进行多重映射,通过提供新对象开始处的列名,可以将行拆分为多个对象
return connection.Query<GtlTitle, Author, Publisher, GtlTitle>(sql,
(g,a,p) => {
g.TitleAuthor = a;
g.Publisher = p;
return g; },
splitOn: "FirstName,PublisherName").First();
这回答了你的问题吗@Crowcoder这不是嵌套的情况,更像一对一映射。看起来像一个复杂的对象查询。你只需要告诉Dapper每个物体在哪里。查看此链接:@Alex splitOn在我发布的链接中被提到过几次。@Crowcoder是的,提到过,但当前问题的作者没有嵌套关系,只是一个简单的一对一映射。