Cin*_*Bun 3 sql dapper asp.net-mvc-4
我最近一直在玩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; }
}
Run Code Online (Sandbox Code Playgroud)
我的帖子课
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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我从我的数据库中获取所有发布数据的查询,也是获取创建帖子的用户名.
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;
}
Run Code Online (Sandbox Code Playgroud)
这是我想要显示信息的视图代码:
@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>
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的代码时,我得到'对象引用没有设置为对象的实例'错误.这是因为我不应该使用:
public User User { get; set; }
Run Code Online (Sandbox Code Playgroud)
访问用户名属性,或者我应该创建一个带有用户名字段的新类.任何输入将不胜感激.
I get the 'Object reference not set to an instance of an object' error
Run Code Online (Sandbox Code Playgroud)
我打赌这个问题就在这一行:<p>@post.User.Username</p>这是因为你没有映射User对象.您应该更改此代码:
var posts = sqlConnection.Query<Post>(myQuery);
Run Code Online (Sandbox Code Playgroud)
对此:
var posts = sqlConnection.Query<Post, User, Post>(
myQuery,
(p, u) => { p.User = u; return p; }
);
Run Code Online (Sandbox Code Playgroud)