Ich habe eine SQLite Tabelle "Phrasen" wie:
CREATE TABLE [phrases] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[phrase] CHAR,
[parent_id] INTEGER);
und ich fülle es mit Demo-Daten:
id | phrase | parent_id
1 | parent phrase | (null)
2 | some child 1 | 1
3 | some child 2 | 1
Und ich habe ein C # -Modell wie:
class Phrase
{
int id { get; set; }
string phrase { get; set; }
int parent_id { get; set; }
Phrase parent { get; set; }
}
Wie kann ich Dapper korrekt verwenden, um diese Tabelle dieser Klasse zuzuordnen? Vielen Dank.
Sie müssen zu Ihrer Select-Abfrage die Phrase child hinzufügen (ich benutze 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 ist in der Lage, die zurückgegebene Zeile zu teilen, indem eine Annahme gemacht wird, dass Ihre Id-Spalten den Namen Id oder id haben (standardmäßig).
C #:
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);
}
}