我是Dapper的新手并试图弄清楚如何查询多对多关系 我已经环顾了SO和谷歌,但找不到一个例子。
我有一个简单的多对多场景,有3个表:
相册表:
艺术家表:
和多对多表:
这些是我的POCOS:
public class Artist
{
public long Id { get; set; }
public string Name { get; set; }
}
public class Album
{
public long Id { get; set; }
public string Name { get; set; }
public List<Artist> Artists { get; set; }
}
有人可以提供正确的&#34;获取专辑列表的有效方法,每张专辑都包含它的艺术家(艺术家也应该填写他们的名字属性)?
答案 0 :(得分:0)
我确定你现在必须找到解决方案。这可能会有所帮助,可能不是编码它的最佳方式。
是否可以复制专辑和艺术家课程? 如果是这样,这就是我要做的。
public List<Artist> GetAll()
{
using (SqlConnection conn = new SqlConnection(Conn.String))
{
conn.Open();
using (var multi = conn.QueryMultiple(StoredProcs.Artists.GetAll, commandType: CommandType.StoredProcedure))
{
var artists = multi.Read<Artist, AlbumArtist, Artist>((artist, albumArtist) =>
{
artist.albumArtist = albumArtist;
return artist;
}).ToList();
var albums = multi.Read<Album, AlbumArtist, Album>(
(album, albumArtist, album) =>
{
album.albumArtist = album;
return albums;
}).ToList();
conn.Close();
return artists;
}
}
}
这里有proc的样子
CREATE PROCEDURE [dbo].[YourProcName]
AS
BEGIN
SET NOCOUNT ON;
SELECT * from Artist a
left join AlbumArtist aa
on a.ArtistId = aa.ArtistId;
EXEC dbo.Album_GetAll
WITH RESULT SETS UNDEFINED;
END
希望这有帮助。