Dapper Multi Mapping 上的某些值 return null

Some value return null on Dapper Multi Mapping

我在使用 Dapper 时遇到问题。 我有一个包含字段 valoreRubrica class 列表。 当我 运行 使用 JOIN 查询并确定议程类型时,valore 字段仍设置为 null

我的两个 classes 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; }
}

我创建了一个函数,returns 我得到一个 Agenda 的列表,用 table anagrafico_tipo_rubrica[= 执行 JOIN 27=]

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

这里可以看到查询的内容returns

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

你在 tipo 上拆分,它在你的查询中出现在 valore 之前,所以 dapper 正在拆分列并且认为 valore 是针对 TipoRubrica 而不是Rubrica

Select 字段的顺序在您的查询中明确显示

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)