Ich habe ein Problem mit Dapper
. Ich habe eine Liste der Rubrica
Klasse, die das Feld valore
enthält. Wenn ich eine Abfrage mit einem JOIN ausführe und den Agenda-Typ identifiziere, bleibt das valore
Feld auf null
Meine zwei Klassen Rubrica
und 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; }
}
Ich habe eine Funktion erstellt, die mir eine Agenda
Liste zurückgibt, die einen JOIN mit der Tabelle 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();
}
}
Hier können Sie sehen, was die Abfrage zurückgibt
Und hier sehen Sie, wie in der Agenda
Liste der Wert von valore
auf null
Du splitest auf tipo
, was in deiner Abfrage vor valore
, also dapper spaltet die Spalten und denkt, valore
ist für TipoRubrica
statt für Rubrica
Wählen Sie die Reihenfolge der Felder explizit für Ihre Abfrage aus
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 ...
Also , wenn Sie auf Split tipo
, valore
ist vorher, und es ist auf den ersten Typ (abgebildet Rubrica
), statt mit dem zweiten ( TipoRubrica
)