4つの関連テーブルがあります:Project-> ProjectDoc-> Comment-> CommentReply&Usersこれらのテーブルのうち3つはUsersに関連しています。User.FirstName値を取得しようとすると、次のことを示す例外が表示されます。
Object reference not set to an instance of an object.
したがって、最初にユーザーモデル。
public class User
{
public int UserID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Comment> Comment { get; set; }
public virtual ICollection<CommentReply> CommentReply { get; set; }
public virtual ICollection<Project> Project { get; set; }
}
次に、プロジェクトモデル。
public class Project
{
public int ProjectID { get; set; }
public int UserID { get; set; }
public string Title { get; set; }
public virtual ICollection<ProjectDoc> ProjectDoc { get; set; }
public User User { get; set; }
}
今かみそりのビュー。例外にラベルを付けました。
@Model.User.FirstName //exception
@foreach (var doc in Model.ProjectDoc)
{
@doc.DocTitle
<br />
<div>
@doc.Comment.Count() comments
</div>
foreach (var comment in doc.Comment)
{
<div>
@comment.CommentVote.Count()
votes
@comment.UserID - user ID<br />
@comment.User.FirstName //exception
@comment.Text
</div>
<br />
foreach (var creply in comment.CommentReply)
{
@creply.User.FirstName //exception
<br />
@creply.Text
<br />
}
}
}
User.FirstName行を削除すると、正常に機能します。FirstName値を取得するには、何を変更する必要がありますか?あなたは助けるためにもっと多くの情報が必要ですか?
更新:それが役立つなら、私のコントローラー。
// GET: /Projects/Details/5
public ActionResult Details(int id = 0)
{
Project project = db.Projects.Find(id);
if (project == null)
{
return HttpNotFound();
}
return View(project);
}
コントローラーもこれに変えてみましたが、うまくいきませんでした
Project project = db.Projects
.Include(i => i.User)
.SingleOrDefault(x => x.ProjectID == id);
アップデート2:流暢なAPIマッピングの問題?
UserIDフィールドには値がありますが、User_UserIDの値はNULLであるため、流暢なAPIマッピングを誤って行っていると思います(User_UserID列は必要ありません)。
modelBuilder.Entity<User>()
.HasMany(p => p.Project)
.WithRequired()
.HasForeignKey(c => c.UserID)
.WillCascadeOnDelete(false);
それが問題の原因ですか?