繁体   English   中英

Dapper多次映射错误

[英]Dapper multi-mapping error

我正在努力使多映射在dapper中工作。

这是我的代码:

var contactDictionary = new Dictionary<Guid, Contact>();

IEnumerable<Contact> contacts = connection.Query<Contact, Activity, Contact>(
        @"SELECT ContactId, Title, FirstName, Surname, 
            AddressType.Type AS AddressType, Address.AddressLine1, Address.AddressLine2, Address.AddressLine3, Address.Town, Address.County, Address.Country, Address.Postcode,
            EmailAddressType.Type AS EmailAddressType, EmailAddress.Email AS EmailAddress,
            PhoneNumberType.Type As PhoneNumberType, PhoneNumber.Number AS PhoneNumber,
            Direction.Type AS Direction, Activity.Summary, Activity.DateCompleted
        FROM Contact
            LEFT JOIN Address ON Contact.ContactPK = Address.ContactPK
                LEFT JOIN AddressType ON Address.AddressTypePK = AddressType.AddressTypePK
            LEFT JOIN EmailAddress ON Contact.ContactPK = EmailAddress.ContactPK
                LEFT JOIN EmailAddressType ON EmailAddress.EmailAddressTypePK = EmailAddressType.EmailAddressTypePK
            LEFT JOIN PhoneNumber ON Contact.ContactPK = PhoneNumber.ContactPK
                LEFT JOIN PhoneNumberType ON PhoneNumber.PhoneNumberTypePK = PhoneNumberType.PhoneNumberTypePK
            LEFT JOIN Activity ON Contact.ContactPK = Activity.ContactPK
                LEFT JOIN Direction ON Activity.DirectionPK = Direction.DirectionPK
        WHERE Contact.ContactId = @ContactId
            AND Address.IsPrimary = 1 AND EmailAddress.IsPrimary = 1 AND PhoneNumber.IsPrimary = 1",
        param:new { ContactId = contactId },
        map:(c, a) =>
        {
            Contact contactEntry;

            if (!contactDictionary.TryGetValue(c.ContactId, out contactEntry))
            {
                contactEntry = c;
                contactEntry.Activities = new List<Activity>();
                contactDictionary.Add(contactEntry.ContactId, contactEntry);
            }

            contactEntry.Activities.Add(a);
            return contactEntry;
        },
        splitOn: "ContactId")
        .Distinct()
        .ToList();    

这是在SSMS中运行时SQL的结果: 在此处输入图片说明

这是代码执行时出现的错误: 使用多重映射API时,如果您具有Id以外的其他键,请确保设置splitOn参数参数名称:splitOn

我真的很困惑,因为我认为我已经指定了splitOn参数?

任何帮助,将不胜感激。

splitOn参数应向dapper指示如何将属性与两个实体(Contact和Activity)分开,应将其设置为Activity的第一个属性(假设您的属性在SQL语句中排序)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM