2016-04-21 2 views
4

У меня возникла проблема с использованием Dapper. У меня есть список класса Rubrica, который содержит поле valore. При запуске запроса с РЕГИСТРИРУЙТЕСЬ и определить тип повестки дня, то valore поля остается равным nullНекоторое значение возвращает null на Dapper Multi Mapping

Моих два класса Rubrica и TipoAgenda

public class Rubrica // Same as table anagrafico_rubrica 
{ 
    public int id_rubrica { get; set; } 
    public string cod_anagrafica { get; set; } 
    public string descrizione_contatto { get; set; } 
    public TipoRubrica tipo { get; set; } 
    public string valore { get; set; } 
} 

public class TipoRubrica // Same as table anagrafico_tipo_rubrica 
{ 
    public int id_tipo_rubrica { get; set; } 
    public string descrizione_tipo_rubrica { get; set; } 
} 

Я создал функцию, которая возвращает мне список из Agenda делает РЕГИСТРИРУЙТЕСЬ со столом anagrafico_tipo_rubrica

public List<Rubrica> GetAgendaAnagrafico(string codiceAnagrafico) 
    { 
     using (DatabaseConnection db = new DatabaseConnection()) 
     { 
      const string query = @"SELECT * FROM anagrafico_rubrica JOIN anagrafico_tipo_rubrica ON tipo = id_tipo_rubrica WHERE cod_anagrafica = @anagrafico"; 
      var parametri = new { anagrafico = codiceAnagrafico }; 
      return db.con.Query<Rubrica, TipoRubrica, Rubrica>(query, (rubrica, tipo) => { rubrica.tipo = tipo; return rubrica; }, parametri, splitOn: "tipo").ToList(); 
     } 
    } 

Здесь вы можете увидеть, что запрос возвращает

My result Query

И вот вы видите, как INT в Agenda списке есть значение valore набора для null

'valore' have value null

ответ

4

Вы Расщепление на tipo, который приходит до valore в ваш запрос, поэтому dapper разбивает столбцы и думает valore есть f или TipoRubrica вместо для Rubrica

Выберите порядок полей Явно на запросе

SELECT id_rubrica, 
     cod_anagrafica, 
     descrizione_contatto, 
     valore, 
     tipo,  // <-- you are splitting here. columns above are for 
        //  first type, columns below for second 
     id_tipo_rubrica, 
     descrizione_tipo_rubrica 
    FROM ... 

Так что, когда вы разбиваете на tipo, valore это раньше, и это отображается на первый тип (Rubrica), вместо второго (TipoRubrica)

+0

Пробовал, он работает! Я думал, что Даппер может понять, какое поле автоматически связывает значения, учитывая имя класса. –

+1

По соглашению он разбивается на поля 'Id', но если вы специально рассказываете ему о том, в каком столбце делиться (по параметру' splitOn: "tipo" '), он будет делать, как вы его команду ;-) – Jcl

+0

Даже если бы это было не так, разумно (если у вас нет особой необходимости) выбирать поля, которые вам нужны в ваших запросах, явным образом, а не использовать 'SELECT *' :-) – Jcl