2017-02-19 81 views
0

我的查詢涉及多個表格,並且從我在Dapper上閱讀的內容中,我只能找到一些示例,至少我知道這個示例是查詢一個模型。Dapper - 查詢多個模型

下面是我的模型文件夾下的3類:

public class User 
{ 
    public string UserName { get; set; } 
    public string UserId { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 
} 

public class Date 
{ 
    public string UserName { get; set; } 
    public string UserCode { get; set; } 
    public string LastLogin { get; set; } 
} 

public class Photo 
{ 
    public class UserName { get; set; } 
    public string UserId { get; set; } 
    public string PhotoUrl { get; set; } 
} 

在我的倉庫,我有我的連接代碼,然後一個方法來獲得我需要的所有信息,但是這種方法是聯繫在一起的User模型但我也需要檢索照片,當我嘗試製作複合類時,我可以在視圖中輸入UserPhoto模型,但它給了我一個錯誤,表示它僅預期User DataView。

public List<User> GetAll() 
{ 
    using (SqlConnection cn = new SqlConnection(connectionString)) 
    { 
     var allResults = cn.Query<User>("SELECT UserName, Email, Phone, (SELECT TOP 1 PhotoPath FROM Photo WHERE User.UserId = Photo.UserId) FROM User) 

回答

1

User類不包含像PhotoPath財產 - 你想到哪裏放了Dapper將新的/額外的價值?

您應該創建新的類(例如,ViewModels/UserAndPhoto.cs),其中包含您選擇的所有屬性 - 然後Dapper將成功從數據庫中讀取它。

+0

我總是認爲這些類對應於數據庫中的表,因爲用戶和照片是兩個不同的表,我認爲他們必須是不同的類。這不是這種情況嗎? –

+0

在EntityFramework中 - 是的,在Dapper中 - 沒有。它只是通過名稱將字段(在查詢中)映射到屬性(在類中) - 您應該只關心數據類型。 – Dmitry

+0

類中的字段應直接反映select語句中返回的列。無論表格是什麼,只有選擇語句。 – ganders