2

这是关于 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 时,如果您有除 Id 以外的键,请确保设置 splitOn
参数名称:splitOn

我错过了什么???

4

1 回答 1

3

查询结果需要与您要填充的对象具有相同的格式和顺序。在这种情况下,dapper 期望您拥有“Id、Name、Id、Name”,其中前两个是分支 master 的 Id 和 Name,第三和第四列是 zone master 的 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();
于 2013-05-09T06:55:04.337 回答