使用存储过程的多重映射的精致小工具

时间:2013-05-09 06:14:36

标签: c# asp.net-mvc-3 stored-procedures dapper

这是关于ASP.NET MVC3中的Dapper。

我的数据库中有两个表tblBranchMastertblZoneMaster和两个具有相同详细信息的类文件。

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

我缺少什么?

1 个答案:

答案 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();