我有 4 个相关表:Project->ProjectDoc->Comment->CommentReply & Users 其中 3 个表与用户相关。当我尝试获取 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:Fluent API 映射问题?
UserID 字段有一个值,但是 User_UserID 值是 NULL,所以我假设我的流利 api 映射不正确(我不想要 User_UserID 列)。
modelBuilder.Entity<User>()
.HasMany(p => p.Project)
.WithRequired()
.HasForeignKey(c => c.UserID)
.WillCascadeOnDelete(false);
这是造成问题的原因吗?