这是关于ASP.NET MVC3中的Dapper。
我的数据库中有两个表tblBranchMaster
,tblZoneMaster
和两个具有相同详细信息的类文件。
tblBranchMaster(ID, ZoneID, Name);
tblZoneMaster(ID, Name);
两个表都具有主键外键关系。
我有一个存储过程,其中包含以下查询:
Select * from tblBranchMaster;
还有一些其他合乎逻辑的东西。
现在我该如何获得带有相关分支列表的区域结果。
我有以下代码库:
List<tblBranchMaster> lstResult = Query<tblBranchMaster, tblZoneMaster, tblBranchMaster>
(tblBranchMaster.uspGetBranchListPagination, (objBranch, objZone) =>
{ objBranch.ZoneMaster = objZone; return objBranch; },
param, splitOn:"Id").ToList();
此代码给出了以下错误:
使用多映射API时,请确保设置splitOn参数if 你有除了以外的钥匙 参数名称:splitOn
我缺少什么?
答案 0 :(得分:3)
查询结果需要与要填充的对象具有相同的格式和顺序。在这种情况下,dapper希望你有“Id,Name,Id,Name”,其中前两个是分支主机的Id和Name,第3和第4列是区域主机的Id和Name。
鉴于以下类别:
class Branch
{
int Id { get; set }
string Name { get; set }
}
class Zone
{
int Id { get; set }
string Name { get; set }
}
存储过程中的以下SQL查询格式:
SELECT b.Id, b.Name, z.Id, z.Name
FROM Branch b LEFT JOIN Zone z ON b.ZoneId = z.Id
您应该可以使用这个精巧的代码:
var result = connection.Query<Branch, Zone, Branch> ("myStoredProcName",
(objBranch, objZone) => { objBranch.ZoneMaster = objZone; return objBranch; },
param, commandType: CommandType.StoredProcedure).ToList();