Запрос данных из нескольких таблиц с помощью Dapper - PullRequest
0 голосов
/ 25 мая 2020

У меня есть таблица базы данных GTL_TITLES , в которой есть два внешних ключа, AuthorId и PublisherId. Если я хочу запросить заголовок из базы данных, я хочу также получить информацию из таблиц AUTHOR и PUBLISHER . Для этого я создал хранимую процедуру, которая объединяет все три таблицы и выбирает следующие столбцы:

enter image description here

My GtlTitle Model class выглядит так:

public string ISBN { get; set; }
public string VolumeName { get; set; }
public string TitleDescription { get; set; }
public string PublisherName { get; set; }    
public DateTime PublicationDate { get; set; }
public Author TitleAuthor { get; set; }
public Publisher Publisher { get; }

Как вы уже могли догадаться, class Author имеет две строки: FirstName и LastName и Publisher имеет PublisherName.

Сказано, что это метод, вызывающий базу данных:

public GtlTitle GetTitle(string ISBN)
    {
        using (var connection = new SqlConnection(_connection))
        {
            connection.Open();
            return connection.QuerySingle<GtlTitle>("GetTitleByISBN", new { ISBN }, commandType: CommandType.StoredProcedure);
        }
    }

И возвращает следующее: {"isbn":"978-0-10074-5","volumeName":"Volume Name - 97581","titleDescription":"Description - 97581","publisherName":"Publisher - 714","publicationDate":"2020-05-23T00:00:00","titleAuthor":null,"publisher":null}

Как видите, titleAuthor и publisher равны нулю. Как я могу это исправить? Нужно ли мне вместо этого писать поля типа public string FirstName в классе модели GtlTitle или есть ли способ заполнить Author и Publisher ?

1 Ответ

1 голос
/ 25 мая 2020

Dapper поддерживает множественное сопоставление с параметром splitOn, где вы можете разбить строку на несколько объектов, указав имена столбцов, в которых начинается новый объект.

return connection.Query<GtlTitle, Author, Publisher, GtlTitle>(sql,
    (g,a,p) => { 
                 g.TitleAuthor = a; 
                 g.Publisher = p; 
                 return g; }, 
    splitOn: "FirstName,PublisherName").First();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...