我一直在玩这个游戏,因为它看起来很像所记录的帖子/用户示例,但它略有不同,对我不起作用。假定以下简化设置(联系人具有多个电话号码):public class Contact{ public int ContactID { get; set; } public string ContactName { get; set; } public IEnumerable<Phone> Phones { get; set; }}public class Phone{ public int PhoneId { get; set; } public int ContactID { get; set; } // foreign key public string Number { get; set; } public string Type { get; set; } public bool IsActive { get; set; }}我很乐意以返回带有多个Phone对象的Contact的结尾。这样,如果我有2个联系人,每个联系人有2部手机,那么我的SQL将返回这些联系人的联接,结果集共有4行。然后Dapper将弹出两个带有两个电话的联系人对象。这是存储过程中的SQL:SELECT *FROM Contacts LEFT OUTER JOIN Phones ON Phones.ReferenceId=Contacts.ReferenceIdWHERE clientid=1我尝试了一下,但最终得到了4个元组(这是可以的,但是不是我想要的...这只是意味着我仍然必须对结果进行重新规范化):var x = cn.Query<Contact, Phone, Tuple<Contact, Phone>>("sproc_Contacts_SelectByClient", (co, ph) => Tuple.Create(co, ph), splitOn: "PhoneId", param: p, commandType: CommandType.StoredProcedure);当我尝试下面的另一种方法时,出现了一个异常“无法将类型为'System.Int32'的对象转换为类型为'System.Collections.Generic.IEnumerable'1 [Phone]'”。var x = cn.Query<Contact, IEnumerable<Phone>, Contact>("sproc_Contacts_SelectByClient", (co, ph) => { co.Phones = ph; return co; }, splitOn: "PhoneId", param: p, commandType: CommandType.StoredProcedure);我是在做错什么吗?看起来就像帖子/所有者的示例一样,只是我要从父级转到子级,而不是从子级转到父级。
添加回答
举报
0/150
提交
取消