即使我使用 splitOn 参数后仍然出现异常
Posted
技术标签:
【中文标题】即使我使用 splitOn 参数后仍然出现异常【英文标题】:Still getting the exception even after I use splitOn param 【发布时间】:2017-04-27 15:48:12 【问题描述】:我有引用 2 个对象位置和类别的事件类。
我编写了我的 SQL 查询字符串,它工作正常,但是当我将查询放入 dapper ORM.VS 时告诉我我有一个内部异常。即使使用 splitOn 参数,我仍然会收到异常。
注意:我们使用 RecordID 作为 col 的 name 键 col 用于下表 Event、EventLocation 和 EventCategory。那是问题吗?
System.ArgumentException 发生 HResult=0x80070057 消息=当 如果您使用多映射 API,请确保您设置 splitOn 参数 拥有除 Id 以外的键
public IEnumerable<Event> SelectEventsForList()
// using (var db = new )
var queryStr = @"SELECT
e.RecordID
,e.Title
,e.Description [Description]
,e.Location [LocationDetails]
,e.RegistrationRequired AS [IsRegistrationRequired]
,e.StartDate AS [EventDate]
,e.StartDate
,e.EndDate
,e.MaximumRegistrants
,eloc.RecordID
,eloc.DisplayName
,eloc.DisplayColour
,ecat.RecordID
,eCat.DisplayName
,eCat.DisplayColour
FROM dbo.Event e INNER JOIN dbo.EventLocation eloc ON e.LocationId = eloc.RecordID
INNER JOIN dbo.EventCategory eCat ON e.CategoryID = ecat.RecordID
WHERE eCat.Deleted = 0";
return this.dbConnection.Query<Event, Location, Category, Event>(
queryStr, (e, l, c) =>
e.Location = l; e.Category = c; return e;
,splitOn: "eloc.RecordID,ecat.RecordID");
【问题讨论】:
你试过只用 eloc.RecordID,ecat.RecordID 吗?其他 id 不参与您的映射 另外,最好指定所有字段的名称,而不是使用 * 我删除 * 并使查询变得冗长,将查询拆分为 Event |位置 |类别,我刚刚使用 eloc.RecordID,ecat.RecordID 仍然得到同样的错误。 :( .我看到更新的代码 我的代码中有一个示例,我不添加表说明符,而只添加字段名称。 IE:RecordID 不确定是否需要两次。 您可以在这些答案中找到一些亮点:***.com/questions/7472088/… 和 ***.com/questions/17168926/… 【参考方案1】:如果在select子句中写入表名.列名,结果集中的列名将不包含表名。例如:
select eloc.RecordId
from dbo.EventLocation eloc
返回的列名将是RecordId
。
所以你应该使用 splitOn:"RecordId,RecordId"。
Dapper 向后查看结果集中的列,因此它应该找到查询返回的第二和第三个 RecordId 列。
【讨论】:
以上是关于即使我使用 splitOn 参数后仍然出现异常的主要内容,如果未能解决你的问题,请参考以下文章
即使代码在try / catch块中,我仍然会收到异常[关闭]