Dapper multi, отображающий два свойства одного типа
Допустим, у меня есть контакты, хранящиеся в моей базе данных в плоской форме, так что я запрашиваю их следующим образом:
SELECT Name, HomeHouseNumber, HomePostcode, WorkHouseNumber, WorkPostcode FROM Contacts
Я хотел бы немного больше структурировать в своем коде C# и иметь это простое определение контакта с домашним и рабочим адресом.
class Address
{
public string HouseNumber { get; set; }
public string Postcode { get; set; }
}
class Contact
{
public string Name { get; set; }
public Address HomeAddress { get; set; }
public Address WorkAddress { get; set; }
}
Я обнаружил, что могу использовать множественное сопоставление и извлекать домашний адрес, используя псевдонимы столбцов в select:
IEnumerable<Contact> GetContacts()
{
return Connection.Query<Contact, Address, Address, Contact>(
"SELECT Name, HomeHouseNumber as HouseNumber, HomePostcode as Postcode, WorkHouseNumber, WorkPostcode FROM Contacts",
(contact, home, work) =>
{
contact.HomeAddress = home;
contact.WorkAddress = work;
return contact;
},
splitOn: "HouseNumber,WorkHouseNumber");
}
Однако я не могу создать псевдоним столбцов рабочего адреса таким образом, чтобы они отображались. Может ли Dapper выполнить это отображение для меня или я должен сделать это вручную?
1 ответ
Решение
Решение, невероятно, состоит в том, чтобы дать столбцам одинаковый псевдоним. Я не думал, что SQL допустит это, но это происходит, и Даппер все это отлично отображает.
IEnumerable<Contact> GetContacts()
{
return Connection.Query<Contact, Address, Address, Contact>(
"SELECT Name, HomeHouseNumber as HouseNumber, HomePostcode as Postcode, WorkHouseNumber as HouseNumber, WorkPostcode as Postcode FROM Contacts",
(contact, home, work) =>
{
contact.HomeAddress = home;
contact.WorkAddress = work;
return contact;
},
splitOn: "HouseNumber,HouseNumber");
}