Dapper MultiMapping для 3 отношений один-к-одному - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть 3 таблицы в Sql Сервер, отношения один-к-одному.

Ключ Indice во всех 3 таблицах.

3 сущности:

public class Client
{
     public int Indice { get; set; }
     public string Name { get; set; }
     public string Surname { get; set; }
     public string Company { get; set; }
     public string Tel1 { get; set; }
     public string Tel2 { get; set; }
}

public class CallClient
{
     public int Indice { get; set; }
     public string CallDateTime { get; set; }
     public string Status { get; set; }
}

public class ResponsePollClient
{
     public int Indice { get; set; }
     public string Question1 { get; set; }
     public string Question2 { get; set; }
     public string Question3 { get; set; }
     public string StatusPoll { get; set; }
}

У меня есть эта основная сущность

public class DataClient
{
     public Client client { get; set; }
     public CallClient callClient { get; set; }
     public ResponsePollClient pollClient { get; set; }
}

SQL:

выберите c .Indice, ...., cc .Indice, ..., p c .Indice, ...
от клиента c
внутреннее соединение CallClient cc on c .Indice = cc .Indice
внутреннее соединение PollClient p c on c .Indice = p c .Indice

Как я могу использовать Dapper для заполнения сущности List?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Код должен выглядеть примерно так:

var entityList = connection.Query<DataClient, Client, CallClient,ResponsePollClient,DataClient>(
            sql,
            (dataClient, client, callClient, responsePollClient) =>
            {
                dataClient.client = client;
                dataClient.callClient = callClient;
                dataClient.pollClient = responsePollClient;
                return dataClient;
            },
            splitOn: "Indice").ToList();

Это довольно просто, вы можете найти полную документацию здесь

1 голос
/ 23 апреля 2020

Следующий код должен отображать ваши документы:

   var sql = @"SELECT c.Indice 
             , c.Name
             , ....
             , cc.Indice
             , cc.CallDateTime 
             , ....
             , rpc.Indice 
             , rpc.Question1 
             , .... 
        FROM Client c
  INNER JOIN CallClient cc on c.Indice = cc.Indice
  INNER JOIN PollClient pc on c.Indice = pc.Indice";

        using (var conn = new SqlConnection())
        {
            var res = conn.Query<Client, CallClient, ResponsePollClient, DataClient>(sql, (c, cc, pc) =>
            {
                   var d = new DataClient() 
                   {
                     client = c, 
                     callClient = cc, 
                     pollClient = pc
                    };

                return dc;
            }, splitOn: "Indice");
        }
...