Написание запроса Dapper для вложенных объектов


У меня есть структура кода, как показано ниже:

class Person
{
    Name PersonName;
    int Age;
}

class Name
{
    string FirstName { get; set; }
    string LastName { get; set; }
}

Вот мой сохраненный Proc, который заполняет данные из базы данных.

Create Procedure SpGetAllPersons
As
Select FirstName, LastName, Age from Persons

Как мне написать Dapper запрос, который вытягивает всех людей из базы данных?

Пример:

List<Person> Persons = DbConn.Query<Person>("SpGetAllPersons", CommandType.StoredProcedure);

1 7

1 ответ:

Если вы хотите выбрать вложенные объекты, вам нужно использовать мульти-картограф.

Это должно сработать:

List<Person> persons = DbConn.Query<Name,Person,Person>
  ("SpGetAllPersons",
     (name,person) => {person.Name = name; return person;} 
     commandType: CommandType.StoredProcedure, 
     splitOn: "Age");

Мульти-сопоставитель может возвращать любой тип, даже просто агрегатный тип, который не сопоставлен ни с одной таблицей БД.

Важно предоставить splitOn парам, если вы намерены разделить на что-либо, что не называется id или Id.