2017-02-19 93 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