2016-05-12 11 views
0

Ich versuche ein List Objekt Work mit Dapper zu erstellen, um das Mapping zu tun.Dapper MultiMapping funktioniert nicht

Dies ist der Code:

public class Work 
{ 
    public int id { get; set; } 
    public int id_section { get; set; } 
    public decimal price { get; set; } 
    public Model id_model { get; set; } 
    public Type id_type { get; set; } 
} 

class Model 
{ 
    public int id_model { get; set; } 
    public string Name { get; set; } 
} 

class Type 
{ 
    public int id_type { get; set; } 
    public string Name { get; set; } 
} 

public List<Work> GetListOfWork(int idList) 
{ 
using (DatabaseConnection db = new DatabaseConnection()) //return a connection to MySQL 
{ 
    var par = new {Id = idList}; 
    const string query = "SELECT id,id_section,price,id_model,id_type FROM table WHERE id_section = @Id"; 
    return db.con.Query<Work, Model, Type, Work>(query, 
      (w, m, t) => 
      { 
       w.id_model = m; 
       w.id_type = t; 
       return w; 
      }, par, splitOn: "id_model,id_type").ToList(); 
} 
} 

Es gib mir keinen Fehler aber id_model und id_type in meiner zurückgegebenen Liste ist immer leer (Das Objekt erstellt werden, aber alle Felder sind leer oder null) , andere Felder sind korrekt zugeordnet.

Irgendwelche Hinweise?

+0

Und wie ist es möglich, etwas zu füllen, wenn Sie nicht die Felder aus der Datenbank abrufen, einige fehlen verbindet? – Steve

+0

Da meine Abfrage sehr komplex ist (dies ist nur ein Beispiel), wäre es schlecht, das Mapping manuell durchzuführen? Wie das Erstellen einer Funktion, die ListOfWork mithilfe des Konstruktors für Model und Type abbildet? – SilentRage47

Antwort

1

Sie müssen sich fügen Sie die Verbindungen in die Query-String Wahrscheinlich ist es so etwas wie dieses

var par = new {Id = idList}; 
const string query = @"SELECT w.id,w.id_section,w.price, 
         m.id_model, m.Name, t.id_type, t.Name 
         FROM work w INNER JOIN model m on w.id_model = m.id_model 
            INNER JOIN type t on w.id_type = t.id_type 
         WHERE w.id_section = @Id"; 
return db.con.Query<Work, Model, Type, Work>(query, 
     (w, m, t) => 
     { 
      w.id_model = m; 
      w.id_type = t; 
      return w; 
     }, par, splitOn: "id_model,id_type").ToList();