Dapper Multi Mapping por parent_id

c# dapper

Pregunta

Tengo una tabla SQLite con "frases" como:

CREATE TABLE [phrases] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT, 
[phrase] CHAR, 
[parent_id] INTEGER);

y lo llené con datos de demostración:

id  | phrase         | parent_id
1   | parent phrase  | (null)
2   | some child 1   | 1
3   | some child 2   | 1

Y tengo un modelo C # como:

class Phrase
{
    int id { get; set; }
    string phrase { get; set; }
    int parent_id { get; set; }
    Phrase parent { get; set; }
}

¿Cómo puedo usar Dapper correctamente para asignar esta tabla a esta clase? Gracias.

Respuesta popular

Necesita agregar a su consulta de selección la frase hijo (yo uso MS-SQL):

SELECT      p.id        AS id,
            p.phrase    AS phrase,
            p.parent_id AS parent_id,
            c.id        AS id,
            c.phrase    AS phrase
FROM        phrases p
LEFT JOIN   phrases c ON p.id = c.parent_id

Dapper puede dividir la fila devuelta suponiendo que sus columnas Id se denominan Id o id (de manera predeterminada).

DO#:

public IEnumerable<Phrase> GetPhrase()
    {
        const string sql = @"   SELECT      p.id        AS id,
                                            p.phrase    AS phrase,
                                            p.parent_id AS parent_id,
                                            c.id        AS id,
                                            c.phrase    AS phrase
                                FROM        phrases p
                                LEFT JOIN   phrases c ON p.id = c.parent_id";

        using (var connection = OpenConnection(_connectionString))
        {
            return connection.Query<Phrase, Phrase, Phrase>(sql, (p, c) =>
            {
                p.parent = c;

                return p;
            }, commandType: CommandType.Text);
        }
    }
  • Esto funciona solo para un nivel de hijo a padre (no para anidado)


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué