为了账号安全,请及时绑定邮箱和手机立即绑定

多映射器创建对象层次结构

多映射器创建对象层次结构

翻阅古今 2019-11-22 14:04:27
我一直在玩这个游戏,因为它看起来很像所记录的帖子/用户示例,但它略有不同,对我不起作用。假定以下简化设置(联系人具有多个电话号码):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);我是在做错什么吗?看起来就像帖子/所有者的示例一样,只是我要从父级转到子级,而不是从子级转到父级。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 597 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信