4

我在使用Dapper. 我有一个Rubrica包含该字段的类的列表valore。当我使用JOIN运行查询并确定议程类型时,该valore字段仍设置为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; }
}

我创建了一个函数,它返回一个使用表Agenda进行JOIN的列表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();
        }
    }

在这里您可以看到查询返回的内容

我的结果查询

在这里您可以看到Agenda列表中的值如何valore设置为null

'valore' 的值为 null

4

1 回答 1

4

您正在拆分tipo,它出现valore在您的查询之前,因此 dapper 正在拆分列并且考虑valore的是 forTipoRubrica而不是 forRubrica

在查询中明确选择字段的顺序

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)

于 2016-04-21T08:16:36.247 回答