c# - 使用存储过程进行多重映射的 Dapper

标签 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();

此代码给我以下错误:

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/

相关文章:

asp.net-mvc-3 - MVC3 : Why won't my ModelError propagate to my view?

c# - MVC 3 : DropDownList on an Edit Form for an object that is a property of a ViewModel

c# - 如果浏览器关闭/上传取消,如何停止文件传输

sql-server - 与通过 SSMS 手动执行相比,通过 SSIS(通过 SQL 代理作业)存储过程运行速度慢 24,000%

c# - 在机器人的子对话框中提示用户输入字符串

c# - 在 VS2012 中使用 InstallShield 更新应用程序

c# - 如何将 SQL 连接字符串与 ADO.NET 实体数据模型一起使用

c# - .cor 的文件扩展名限制(仅限)

SQL 汇总和平均

sql - SQL Server中根据行的值调用特定的存储过程/选择语句