У меня проблема с разделением Dapper Query на родительский объект, а не на дочерний объект. Результат возвращает одну родительскую строку на каждого ребенка, давая много дублирующих родителей, в которых есть только один ребенок.
Одной из возможных проблем, которую я исследую, является то, что первичный ключ таблиц1 и таблиц2 вызывает некоторую путаницу в функции разделения, поскольку они имеют одинаковые имена (.Id).
Вопрос в том, как разделить строки родитель-потомок, чтобы он мог связать множество дочерних элементов с одной родительской моделью, используя те же параметры в SplitOn :?
=============================================== ==========================
Заключение
В комментариях мы пришли к выводу, что словарь должен находиться за пределами функции, и не было необходимости в множественном SplitOn:, одного было достаточно.
Наконец, в словаре есть отдельная коллекция таблиц Table1, каждая из которых представляет детей.
См. Комментарии для более подробной информации.
=============================================== ===========================
var sql = $@"
SELECT * FROM Table1 t
INNER JOIN Table2 c ON c.Table1_Id = t.Id;";
var result = connection.Query<Table1, Table2, Table1>(
sql,
(table1, table2) =>
{
Table1 table1Entry;
Dictionary<int?, Table1> table1Dictionary = new Dictionary<int?, Table1>();
if (!table1Dictionary.TryGetValue(table1.Id, out tableEntry))
{
table1Entry = table1;
table1Entry.table2s = new List<Table2>();
tableDictionary.Add(table1Entry.Id, table1Entry);
}
tableEntry.table2s.Add(table2);
return table1Entry;
},
new
{
},
splitOn: "Id,Id");