2014-09-07 3 views
0

Привет, я пытаюсь сделать этот запрос в dapper, но список contatos возвращается со значениями null для моего класса Client, я не знаю, что я делаю неправильно. мой класс Clt_cadCliente - один клиент имеет несколько контактов (clt_cadContatos). Помоги пожалуйста.Dapper C# Внутреннее соединение

var lookup = new Dictionary<int, Clt_cadCliente>(); 

      cn.Query<Clt_cadCliente, Clt_cadContatos, Clt_cadCliente>(@" 
          SELECT s.*, a.* 
          FROM Clt_cadCliente s 
          INNER JOIN Clt_cadContatos a ON s.IdCLiente = a.IdCliente ", (s, a) => 
          { 
           Clt_cadCliente shop; 
           if (!lookup.TryGetValue(s.IdCliente, out shop)) 
           { 
            lookup.Add(s.IdCliente, shop = s); 
           } 
           shop.Clt_cadContatos.Add(a); 
           return shop; 
          }, splitOn: "IdCliente").AsQueryable(); 

      var resultList = lookup.Values; 

Класс:

public partial class Clt_cadCliente 
{ 
    public int IdCliente { get; set; } 
    public Nullable<int> IdClientePai { get; set; } 
    public string Codigo { get; set; } 
    public string Nome { get; set; } 
    public Nullable<System.DateTime> DataNasc { get; set; } 
    public string Sexo { get; set; } 
    public Nullable<int> IdEstCivil { get; set; } 
    public string CPF { get; set; } 
    public string RG { get; set; } 
    public Nullable<System.DateTime> DataAdm { get; set; } 
    public bool Pendencias { get; set; } 
    public string DescPendencia { get; set; } 
    public string Obs { get; set; } 
    public string PessoaFJ { get; set; } 
    public string NomeFantasia { get; set; } 
    public string CodDep { get; set; } 
    public string AtivoInativo { get; set; } 
    public bool Ativado { get; set; } 
    public Nullable<int> IdSitBloq { get; set; } 
    public Nullable<int> SitBloq { get; set; } 
    public string Profissao { get; set; } 
    public string Empresa { get; set; } 
    public string NomeEsposa { get; set; } 
    public Nullable<System.DateTime> NascEsposa { get; set; } 
    public Nullable<int> IdNaturezaPadrao { get; set; } 
    public Nullable<int> ViaCarteirinha { get; set; } 
    public Nullable<int> Casa { get; set; } 
    public Nullable<int> Renda { get; set; } 
    public Nullable<int> RendaComplementar { get; set; } 
    public string Naturalidade { get; set; } 
    public string Banco { get; set; } 
    public string Agencia { get; set; } 
    public string CidadeBanco { get; set; } 
    public bool VeiculoProprio { get; set; } 
    public Nullable<System.DateTime> DIB { get; set; } 
    public string Foto { get; set; } 
    public string Nbeneficio { get; set; } 
    public Nullable<bool> LiberarExame { get; set; } 
    public Nullable<System.DateTime> ValidadeExame { get; set; } 
    public Nullable<int> EnviaBoleto { get; set; } 
    public Nullable<int> IdUsuario { get; set; } 
    public Nullable<long> IdClienteGlobal { get; set; } 
    public virtual IList<Clt_cadContatos> Clt_cadContatos { get; set; } 
} 

Класс 2:

public partial class Clt_cadContatos 
{ 
    public int IdContato { get; set; } 
    public string Nome { get; set; } 
    public string Telefone { get; set; } 
    public string Email { get; set; } 
    public bool AdicionarLista { get; set; } 
    public Nullable<int> IdCliente { get; set; } 
} 

ответ

0

Я не могу проверить это, конечно, но у меня похожая ситуация, и если вы не вставить, по крайней мере, поля таблицы Clt_cadContatos и, в частности, имя поля IdCliente этой таблицы, то библиотека не может разрешить параметр

var lookup = new Dictionary<int, Clt_cadCliente>(); 
cn.Query<Clt_cadCliente, Clt_cadContatos, Clt_cadCliente>(@" 
    SELECT s.*, a.IdCliente, a.OtherField1, a.OtherField2, etc .... 
    FROM Clt_cadCliente s 
    INNER JOIN Clt_cadContatos a ON s.IdCLiente = a.IdCliente ", (s, a) => 
    { 
     Clt_cadCliente shop; 
     if (!lookup.TryGetValue(s.IdCliente, out shop)) 
     { 
      lookup.Add(s.IdCliente, shop = s); 
     } 
     shop.Clt_cadContatos.Add(a); 
     return shop; 
    }, splitOn: "IdCliente").AsQueryable(); 
    var resultList = lookup.Values; 
+0

Вы попробовали это решение? – Steve

0

Вы раскалываете неправильный параметр. Вам нужно разбить на IdContato.

Разделение по полю сообщает Dapper, где заканчивается один объект и начинается следующее. Если вы выберете s.*, а затем a.*, вы хотите разделить на второй объект в первом поле таблицы a (я полагаю, что ваши таблицы sql похожи на ваши классы.)