Я столкнулся с проблемой при попытке сделать многократное отображение с помощью Dapper для запросов на нумерацию страниц.
Поскольку я использую вложенный запрос в этом сценарии разбиения на страницы, во вложенном запросе есть несколько таблиця должен присоединиться, чтобы получить мои многоотображенные данные, но некоторые из этих таблиц будут иметь общие поля с тем же именем, которое вы можете увидеть в моем примере запроса ниже (например, id
, displayname
и email
):
q = @"select * from (select p.id, p.title, p.etc...,
u1.id, u1.displayname, u1.email,
u2.id, u2.displayname, u2.email,
t.id, t.name,
row_number() over (order by " + sort.ToPostSortSqlClause() + ") as rownum" +
" from posts p" +
" join users u1 on p.owneruserid = u1.id" +
" join users u2 on p.lastediteduserid = u2.id" +
" join topics t on p.topicid = t.id" +
") seq where seq.rownum between @pLower and @pUpper";
В приведенном выше примере вы можете видеть, что во вложенном запросе будут проблемы с полями id
(появляются в таблице posts
, оба присоединения таблицы users
иtopics
присоединение к таблице), а также displayname
и email
(присутствуют в обоих users
объединениях таблиц).
Единственный обходной путь, о котором я до сих пор думал, заключается в приведении каждого из этих «проблем»Поля под другим именем, но это влечет за собой очень грязный процесс создания фиктивных свойств в затронутых моделях, так что мультимаппирование может отображаться в них и редактировать «реальные» свойства в моих моделяхтакже проверить фиктивное свойство для значения, если действительное значение не было установлено.
Кроме того, в приведенном выше сценарии мне пришлось бы создать x фиктивных свойств, где x - это количество соединений, которые я могу иметь наодна и та же таблица в запросе (в этом примере 2 объединения в одной и той же таблице Users, поэтому требуются 2 фиктивных свойства с уникальным именем только для целей отображения Dapper).
Это, очевидно, не идеально, и я уверен, что будет иметьпостучите в проблемах и больше беспорядка, поскольку я создал больше этих многоуровневых запросов разбиения на страницы.
Я надеюсь, что есть хорошее, чистое решение этой проблемы?