Два стола:
+-Person-+ +--Rank--+
| Id | | Id |
| FName | | Name |
| LName | +--------+
| Rank |
+--------+
Объектная модель выглядит точно так же, за исключением того, что Rank in Person имеет тип RankModel вместо int.
Я делаю на них простое внутреннее соединение:
string sql = "SELECT pe.Id, pe.LName, pe.FName, pe.Rank, ra.Id, ra.Name" +
"FROM Person pe INNER JOIN Rank ra ON ra.Id = pe.Rank";
Затем я использую Dapper для отображения:
return connection.Query<PersonModel, RankModel, PersonModel>(sql, (per, rank) =>
{
per.Rank = rank;
return per;
}).ToList();
Но я получаю исключение:
InvalidCastException: Invalid cast from 'System.Int16' to 'MainDB.Models.RankModel'.
Ясно, что он пытается привести int к RankModel, но я не могу понять, почему - он должен разделить возвращаемый результат на два объекта и затем присоединить объект RankModel к свойству Rank объекта PersonModel. Это сводит меня с ума, я потратил на это 3 часа и не могу понять, что происходит.