Dapper - Quel est le moyen le plus efficace d'interroger une relation plusieurs-à-plusieurs?

dapper many-to-many sql-server

Question

Je suis nouveau sur Dapper et j'essaie de comprendre comment interroger une relation Many-To-Many.
J'ai regardé autour de SO et de Google mais je n'ai pas trouvé d'exemple.

J'ai un scénario simple de Many-To-Many avec 3 tables:

Tableau des albums:

Des albums

Table d'artistes:

Artistes

et la table Many-To-Many:

AlbumArtist

Ce sont mes 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; }
}

Quelqu'un peut-il fournir le moyen "correct" et efficace d'obtenir une liste d'albums, et chaque album contient ses artistes (les artistes doivent avoir la propriété Name remplie aussi)?

Réponse populaire

Je suis sûr que vous avez dû trouver la solution maintenant. Cela pourrait être utile, peut-être pas le moyen le plus simple de le coder.

Est-il possible de reproduire des cours d'album et d'artiste? Si oui, c'est ce que je ferais.

 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;
            }
        }
    }

Voici à quoi ressemblerait le 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

J'espère que cela t'aides.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi