我有一个Comment
课程,其中包括Author
属性:
public class Comment : IEquatable<Comment>
{
public int ID { get; set; }
[Required]
public virtual User Author { get; set; }
// More properties here
}
我希望用户能够“喜欢”评论,就像在StackOverflow中一样。为此,我在CommentController
:
public virtual ActionResult Like(int id)
{
var comment = _session.Single<Comment>(c => c.ID == id);
comment.Likes++;
_session.CommitChanges();
return Json(new { comment.Likes });
}
每当我调用此操作时,我都会收到以下验证错误:
“作者”字段是必需的。
Comment
对象来自db,因此它有一个作者。 “有趣”的是,每当我使用Visual Studio调试器检查Author
是否真的丢失时,验证错误都不会触发。
我是否正确地假设问题是Author
属性的延迟加载永远不会发生?如果是这样,我怎样才能仅针对这种情况强制填写所有导航属性? (我想继续使用延迟加载)
解决这个问题的最佳方法是什么?我是否走在正确的轨道上? 为什么延迟加载不会发生,而EF显然需要它来保存实体?
任何帮助将不胜感激。
答案 0 :(得分:2)
您可以使用Include
急切地获取数据上下文的关系。
context.Comments.Include("Author").Single<Comment>(c => c.ID == id);
答案 1 :(得分:0)
我遇到过类似的问题。以下应该工作(启用LazyLoading)。
public virtual ActionResult Like(int id)
{
var comment = _session.Single<Comment>(c => c.ID == id);
comment.Likes++;
if(TryUpdateModel(comment))
{
_session.CommitChanges();
}
return Json(new { comment.Likes });
}