gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:15:03 26 4
gpt4 key购买 nike

我最近一直在玩 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;
}

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

@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; }

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

最佳答案

I get the 'Object reference not set to an instance of an object' error

我打赌问题出在这一行:<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; }
);

关于sql - Dapper - 对象引用未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16592194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com