延迟加载和RequiredAttribute问题:XXX字段是必需的

时间:2011-04-13 21:56:03

标签: asp.net-mvc asp.net-mvc-3 data-annotations ef-code-first entity-framework-4.1

我有一个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显然需要它来保存实体?

任何帮助将不胜感激。

2 个答案:

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