2011-05-26 34 views
7

我有如下代碼結構:寫作小巧玲瓏查詢的嵌套對象

class Person 
{ 
    Name PersonName; 
    int Age; 
} 

class Name 
{ 
    string FirstName { get; set; } 
    string LastName { get; set; } 
} 

這裏是我的存儲過程,從數據庫填充數據。

Create Procedure SpGetAllPersons 
As 
Select FirstName, LastName, Age from Persons 

如何編寫將Dapper查詢從數據庫中提取所有人的Dapper查詢?

例子:

List<Person> Persons = DbConn.Query<Person>("SpGetAllPersons", CommandType.StoredProcedure);

回答

8

你需要的,如果你要選擇嵌套對象使用多映射。

這應該工作:

List<Person> persons = DbConn.Query<Name,Person,Person> 
    ("SpGetAllPersons", 
    (name,person) => {person.Name = name; return person;} 
    commandType: CommandType.StoredProcedure, 
    splitOn: "Age"); 

多映射器可以返回任何類型,甚至只是沒有映射到任何數據庫表的集合類型。

如果您打算分割任何不叫idId的東西,那麼提供splitOn參數非常重要。

+0

這不適合我。我必須交換名稱:'.Query (...,(person,name)=> ...')的位置。此外,splitOn:「年齡」也不適用於我 - 我不斷收到此錯誤:「當使用多映射API時,確保您設置splitOn參數,如果您有其他鍵以外的鍵」 – Trev 2011-07-16 00:04:34

+0

我誤解了splitOn實際上是什麼做...那部分工作正常...但我仍然需要交換'名稱' – Trev 2011-07-16 02:09:01