У меня SQLite таблицы "фразы", как:
CREATE TABLE [phrases] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[phrase] CHAR,
[parent_id] INTEGER);
и я заполняю его демо-данными:
id | phrase | parent_id
1 | parent phrase | (null)
2 | some child 1 | 1
3 | some child 2 | 1
И у меня есть модель на C #:
class Phrase
{
int id { get; set; }
string phrase { get; set; }
int parent_id { get; set; }
Phrase parent { get; set; }
}
Как правильно использовать Dapper для сопоставления этой таблицы с этим классом? Благодарю.
Вам нужно добавить к вашему запросу запрос фразу child (я использую 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 может разделить возвращенную строку, сделав предположение, что ваши столбцы идентификатора называются Id или id (по умолчанию).
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);
}
}