我正在努力让多映射在小巧玲珑中工作。
这是我的代码:
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();
这是我在代码执行时得到的错误: 当使用多映射API时,如果你有除Id参数名以外的密钥,请确保设置splitOn参数:splitOn
我真的很困惑,因为我以为我已经指定了splitOn参数?
任何帮助,将不胜感激。
splitOn参数应指示如何将属性与两个实体(Contact和Activity)分开,您应该将其设置为activity的第一个属性(假设您的属性在SQL语句中排序)。