2016-04-21 54 views
4

我在使用Dapper時遇到問題。 我有一個Rubrica類的列表,其中包含字段valore。 當我運行一個查詢JOIN,並確定日程類型,valore場仍然設置爲null某些值在Dapper Multi Mapping上返回null

我的兩個班RubricaTipoAgenda

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; } 
} 

我創建了返回我的列表功能的AgendaJOIN與表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之前在您的查詢中,所以小巧玲瓏在分裂列並且認爲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 ... 

所以,當你各執tipovalore是之前的字段的順序,並且它映射到第一類(Rubrica)而不是第二個(TipoRubrica

+0

試過了,它的工作原理!我認爲Dapper可以理解考慮到班級名稱的情況下,哪些字段會自動關聯這些值。 –

+1

按照慣例,它在'Id'字段上分開,但是如果你明確地告訴它要在哪個列上分開(在參數splitOn:「tipo」上),它會按照你命令的方式去做;-) – Jcl

+0

即使不是這種情況,明智地(除非你有一個非常具體的需求)明確地在你的查詢中選擇你需要的字段,而不是使用'SELECT *':-) – Jcl

相關問題