Dapper - オブジェクト参照がオブジェクトのインスタンスに設定されていない

asp.net-mvc-4 dapper sql

質問

私は最近、dapperで遊んでいましたが、私は他のテーブルからデータを取得する際に少し問題に遭遇しました。

私のデータベースには2つのテーブル、ユーザと投稿があります。これらのテーブルに対して2つのクラスを作成しました。

私のUserクラス

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

ユーザー名プロパティにアクセスするか、ユーザー名フィールドを使用して新しいクラスを作成する必要があります。どんな入力も感謝します。

受け入れられた回答

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


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ