【发布时间】: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 不确定是否需要两次。
-
您可以在这些答案中找到一些亮点:stackoverflow.com/questions/7472088/… 和 stackoverflow.com/questions/17168926/…
标签: c# asp.net sql-server orm dapper