我有Event Class,它引用了2个对象Location和Category。
我编写了我的SQL查询字符串,它工作正常,但是当我把查询放在dapper中时,ORM.VS告诉我,我有一个内部异常。即使我使用了splitOn param,我仍然会得到异常。
注意:我们使用RecordID作为col的名称key col,用于下面的表Event,EventLocation和EventCategory。那是问题吗?
发生System.ArgumentException HResult = 0x80070057 Message = When 使用多映射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");
}
答案 0 :(得分:0)
如果在select子句中写入表名。列名,则结果集中的列名将不包含表名。例如:
select eloc.RecordId
from dbo.EventLocation eloc
返回的列名将为RecordId
。
因此,您应该使用splitOn:“ RecordId,RecordId”。
Dapper向后浏览结果集中的列,因此它应该找到查询返回的第二和第三RecordId列。