2012-12-12 132 views
0

說我有這2個表/域PetaPoco/NPoco的多個查詢?

[TableName("TableA")] 
    [PrimaryKey("TableAId")] 
    public class TableA 
    { 
     public int TableAId { get; set; } 
     public string City { get; set; } 

     public TableB TableB { get; set; } 

     public TableA() 
     { 
      TableB = new TableB(); 
     } 

    } 

    [TableName("TableB")] 
    [PrimaryKey("TableBId")] 
    public class TableB 
    { 
     public int TableBId { get; set; } 
     public string Name { get; set; } 
    } 


var sql = @" Select TableA.*, TableB.* 
FROM   TableA INNER JOIN 
         TableB ON TableA.TableBId = TableB.TableBID"; 

// peta poco 
var result = db.Query<TableA, TableB>(sql); 

當我做到這一點,TableA.TableB得到填補,並TableA ID得到填補,但City爲空。我必須指定每個列進行綁定。有沒有使用明星而不是指定每一列?

回答

1

你有什麼但是應該有工作,我認爲可能發生的是,由於這些情況發生:

  1. 您對TableA
  2. TableBId您沒有在TableBId財產類TableA
  3. 當您手動運行查詢,市TableBId後即將來臨的TableA.*部分

映射的工作原理是通過列,以便運行和處理的工作原理是:

  1. 如果在您的泛型參數列表中的第一類列它會得到映射,並移動到下一列(仍然使用第一類進行映射)
  2. 如果該列不在第一個類上,那麼它會考慮第一個類完成並移動到第二個類,依次類推......