2015-10-21 1 views
0

Рассмотрит таблицу с этим именованием для первичных & внешних ключей:Простейшего идиота доказательство Dapper Multimap когда столбец внешнего ключа имеет такое же имя, как ссылочная рк

Create Table Category (
    CategoryId Int Primary Key, 
    Category nvarchar(255), 
    EtcEtc varchar(max) 
) 

Create Table Content (
    ContentId Int Primary Key, 
    CategoryId Int Foreign Key References Category(CategoryId), 
    EtcEtcEtc varchar(max) 
) 

Я хочу сделать что-то вроде:

return dbConnection.Query<Content, Category, Content>(
    @"Select content.*, category.* from Content Join Category On content.CategoryId = category.CategoryId", 
    (c, cat) => 
    { 
     c.Category = cat; 
     return c; 
    }); 

, но для этого требуется параметр SplitOn, поскольку столбцы Id не являются Id.

splitOn:"CategoryId" не работает, потому что имя столбца происходит дважды.

Какое простейшее/наиболее очевидное решение?

ответ

0

Можете ли вы попробуйте изменить запрос следующим образом:

Select co.ContentId, co.CategoryId ContentCategoryId,co.etcetc, ca.CategoryId, ca.Category, 
ca.etcetc from Content co Join Category ca On co.CategoryId = ca.CategoryId 

Теперь splitOn: «CategoryId» будет работать нормально, как и следовало ожидать, так как мы имеем дело с отдельными именами столбцов, однако вы, возможно, придется либо изменить содержание объект CategoryId к ContentCategoryId или вы можете использовать атрибут/свободно картированию между именами столбцов из базы данных для объекта

на мой взгляд, даже в исходном растворе, если изменить порядок столбцов таким образом, что CategoryId для Content является первой колонке выберите в т он Content.*, то, поскольку первый автоматический сплит находится на первом столбце, он должен взять второй код без проблем и создать правильные объекты, в настоящее время он получает Content.CategoryId, когда он смотрит на Category.CategoryId

Смежные вопросы