【问题标题】:Dapper - Query multiple modelsDapper - 查询多个模型
【发布时间】:2017-02-19 17:00:03
【问题描述】:

我的查询涉及多个表,从我在 Dapper 上阅读的内容来看,我只能找到至少我理解的查询一个模型的示例。

以下是我在 Models 文件夹下的 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)

【问题讨论】:

    标签: asp.net-core-mvc dapper


    【解决方案1】:

    您的 User 类不包含像 PhotoPath 这样的属性 - 您希望 Dapper 将新/附加值放到哪里?

    您应该创建一个新类(例如ViewModels/UserAndPhoto.cs),其中包含您选择的所有属性 - 然后 Dapper 将从数据库中成功读取它。

    【讨论】:

    • 我一直假设类对应于数据库中的表,因为 User 和 Photo 是两个不同的表,我认为它们必须是不同的类。不是这样吗?
    • 在 EntityFramework 中 - 是的,在 Dapper 中 - 没有。它只是按名称将字段(在查询中)映射到属性(在类中)——你应该只关心数据类型。
    • 类上的字段应该直接反映在您的选择语句中返回的列。表是什么无关紧要,只有 select 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多