某些值在Dapper Multi Mapping上返回null
问题描述:
我在使用Dapper
时遇到问题。 我有一个Rubrica
类的列表,其中包含字段valore
。 当我运行一个查询JOIN,并确定日程类型,valore
场仍然设置为null
某些值在Dapper Multi Mapping上返回null
我的两个班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
做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();
}
}
在这里,您可以看到该查询返回
在这里,你看怎么样的int Agenda
名单有valore
一套以null
答
要拆分的价值在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 ...
所以,当你各执tipo
,valore
是之前的字段的顺序,并且它映射到第一类(Rubrica
)而不是第二个(TipoRubrica
)
试过了,它的工作原理!我认为Dapper可以理解考虑到班级名称的情况下,哪些字段会自动关联这些值。 –
按照惯例,它在'Id'字段上分开,但是如果你明确地告诉它要在哪个列上分开(在参数splitOn:“tipo”上),它会按照你命令的方式去做;-) – Jcl
即使不是这种情况,明智地(除非你有一个非常具体的需求)明确地在你的查询中选择你需要的字段,而不是使用'SELECT *':-) – Jcl