这是关于 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();
此代码给我以下错误:
When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id
Parameter name: splitOn
我错过了什么???
最佳答案
查询结果需要与您要填充的对象具有相同的格式和顺序。在这种情况下,dapper 希望您拥有“Id,Name,Id,Name”,其中前两列是分支主机的 Id 和名称,第三列和第四列是区域主机的 Id 和名称。
给定以下类(class):
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();
关于c# - 使用存储过程进行多重映射的 Dapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16455550/