Dapper - 对象引用未设置到对象的实例

问题描述 投票:0回答:1

我最近一直在玩 dapper,但是在从其他表获取数据方面遇到了一些问题。

我的数据库有两个表,Users 和 Post。我为这些表创建了两个类。

我的用户类别

 public class User
 {
    public int UserId { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime JoinDate { get; set; }
 }  

我的后期课程

  public class Post
 {
    public int PostId { get; set; }
    public string Title { get; set; }
    public DateTime PublishDate { get; set; }
    public int UserId { get; set; }
    public User User { get; set; }
 }

这是我的查询,用于从数据库中获取所有帖子数据,并获取创建帖子的用户名。

    public IEnumerable<Post> GetPosts()
    {
        string myQuery = "SELECT p.Title, p.PublishDate, p.PostId, p.UserId, u.Username FROM Post p INNER JOIN Users u ON p.UserId = u.UserId";

        sqlConnection.Open();
        var posts = sqlConnection.Query<Post>(myQuery);

        return posts;
    }

这是我要显示信息的视图代码:

@model IEnumerable<MvcDapperIntro.Models.Post>

@{
    ViewBag.Title = "Posts";
}

@foreach (var post in Model)
{
    <h3>@post.Title</h3>
    <p>@post.PublishDate.ToString("dd/MM/yyyy")</p>
    <p>@post.User.Username</p>
}

但是,当我运行代码时,出现“对象引用未设置为对象实例”错误。这是因为我不应该使用:

public User User { get; set; }

访问用户名属性,或者我应该创建一个带有用户名字段的新类。任何意见将不胜感激。

sql asp.net-mvc-4 dapper
1个回答
5
投票

我收到“对象引用未设置到对象实例”错误

我敢打赌问题出在这一行:

<p>@post.User.Username</p>
,那是因为您没有映射 User 对象。您应该更改此代码:

var posts = sqlConnection.Query<Post>(myQuery);

对此:

var posts = sqlConnection.Query<Post, User, Post>(
                myQuery,
                (p, u) => { p.User = u; return p; }
                );
© www.soinside.com 2019 - 2024. All rights reserved.