Dapper - 查询多对多关系的最有效方法是什么?

时间:2014-09-16 14:28:41

标签: sql-server many-to-many dapper

我是Dapper的新手并试图弄清楚如何查询多对多关系 我已经环顾了SO和谷歌,但找不到一个例子。

我有一个简单的多对多场景,有3个表:

相册表:

Albums

艺术家表:

Artists

和多对多表:

AlbumArtist

这些是我的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;获取专辑列表的有效方法,每张专​​辑都包含它的艺术家(艺术家也应该填写他们的名字属性)?

1 个答案:

答案 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

希望这有帮助。

相关问题