Как добавить новый PropertyType в Dapper .Query <> () - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть класс C # с именем Person, и в этом классе Person имеет свойство Telephone типа TelephoneDetails.

Я пытаюсь выполнить запрос к базе данных, используя Dapper и в своем запросе.Мне нужно получить текущий номер телефона (известный как Подробно) и поместить его в мое свойство Telephone.

Вот что я пробовал:

    var person = _connection.Query<Person>($"SELECT person AS Person, Detail AS {new TelephoneDetails{Telephone = ""}} " + // Here's my issue
                                                                  "FROM dbo.Foo WHERE PersonId = @id",
                                                                  new {id}).FirstOrDefault();

    return person;

Каждый раз, когда я возвращаюсьлокальная переменная person Я возвращаю нулевое значение в свой телефонный номер.Как мне взять данные из базы данных, создать экземпляр свойства?

Я чувствую, что дал все необходимое, но если нет, воспользуйтесь пояснениями в разделе комментариев.

Заранее спасибо.

1 Ответ

0 голосов
/ 29 ноября 2018

Ответ представляет собой набор комментариев @Markeli и @ Flydog57

Я решил вопрос, создав новый класс с string типами свойств для обоих наборов данных, которые я хотел получить взамен (Personи Telephone).Важно отметить, что Dapper использует системный подход, поэтому ваш первый тип в наборе записей <TFirst> должен соответствовать тому, что вы извлекаете первым (Person), что должно следовать в этом порядке.

public Person GetPersonDetails(int id)
{
    var person= _connection.Query<Person, TelephoneDetails, PersonDetailsRoot>(
        "SELECT p.* "/* TFirst */", td.* " +
        "FROM Person p " +
        "INNER JOIN TelephoneDetails td ON p.PersonContactId = td.ContactId " +
        "WHERE Id = @id",
        (person /* This is first to match the TFirst*/, details) => new PersonDetailsRoot // The new class made
        {
            PersonName = person.Adviser,
            TelephoneNumber = detail.Detail
        },
        new {id},
        splitOn: "ContactId"
    ).ToList();

    if (!person.Any())
    {
        return null;
    }

    return new PersonDetails();
...