Наши таблицы названы так же, как ваши, где что-то вроде «CustomerID» может быть возвращено дважды с помощью операции «select *».Таким образом, Dapper выполняет свою работу, но просто разделяет слишком рано (возможно), потому что столбцы будут:
(select * might return):
ProductID,
ProductName,
CustomerID, --first CustomerID
AccountOpened,
CustomerID, --second CustomerID,
CustomerName.
Это делает параметр spliton: не очень полезным, особенно если вы не уверены, в каком порядкестолбцы возвращаются. Конечно, вы можете указать столбцы вручную ... но сейчас 2017 год, и мы просто редко делаем это для получения базовых объектов.
То, что мы делаем, и прекрасно работало с тысячами запросов в течение многих лет, просто использует псевдоним для Id и никогда не указывает spliton (используя «Id» по умолчанию в Dapper).
select
p.*,
c.CustomerID AS Id,
c.*
... вуаля!Dapper будет делиться только на Id по умолчанию, и этот Id встречается перед всеми столбцами Customer.Конечно, это добавит дополнительный столбец к вашему возвращаемому набору результатов, но это чрезвычайно минимальные издержки для дополнительной утилиты, позволяющей точно знать, какие столбцы принадлежат какому объекту.И вы можете легко расширить это.Вам нужна информация об адресе и стране?
select
p.*,
c.CustomerID AS Id,
c.*,
address.AddressID AS Id,
address.*,
country.CountryID AS Id,
country.*
Лучше всего, вы ясно показываете в минимальном количестве sql, какие столбцы связаны с каким объектом.Даппер делает все остальное.