两张表:
+-Person-+ +--Rank--+
| Id | | Id |
| FName | | Name |
| LName | +--------+
| Rank |
+--------+
对象模型看起来完全相同,除了Person中的Rank类型为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对象附加到PersonModel对象的Rank属性中。这简直把我逼疯了,我花了3个小时在这上面,弄不清楚到底发生了什么事。
发布于 2018-11-18 02:13:25
您需要在查询语句中添加'splitOn‘param,以便将它们拆分为Person,Rank模型对象。
另外,您的sql需要重构如下
string sql = "SELECT pe.Id, pe.LName, pe.FName, ra.Id, ra.Name" +
"FROM Person pe INNER JOIN Rank ra ON ra.Id = pe.Rank";
你的声明应该是
return connection.Query<PersonModel, RankModel, PersonModel>(sql, (per, rank) =>
{
per.Rank = rank;
return per;
}, splitOn:"Id,Id").ToList();
https://stackoverflow.com/questions/53357149
复制相似问题