asp.net-mvc - 延迟加载和 RequiredAttribute 问题 : The XXX field is required

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

每当我调用此操作时,我都会收到以下验证错误:

The Author field is required.

Comment 对象来自数据库,因此它确实 有作者。 “有趣”的是,每当我使用 Visual Studio 调试器检查 Author 是否确实丢失时,验证错误都不会触发。

我在这里假设问题是 Author 属性的延迟加载永远不会发生,我是否正确?如果是这样,仅针对这种情况,我如何才能强制填写所有导航属性? (否则我想继续使用延迟加载)

解决这个问题的最佳方法是什么?我走在正确的轨道上吗? 为什么在 EF 明确要求它保存实体时不进行延迟加载?

我们将不胜感激。

最佳答案

你可以使用 Include急切地获取数据上下文的关系。

context.Comments.Include("Author").Single<Comment>(c => c.ID == id);

关于asp.net-mvc - 延迟加载和 RequiredAttribute 问题 : The XXX field is required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5656172/

相关文章:

asp.net-mvc - 从 linq-to-sql 中的 Iqueryable<T> 获取计数?

asp.net-mvc - 从下拉列表中选择的值不会从 jquery 对话框中发布

asp.net-mvc-3 - 获取 EditorTemplate 中 HTML 字段的有效 ID

jquery - 如何调用 RedirectToAction 刷新 View ?

c# - DbContext Unity 不调用 HttpContextLifetimeManager.RemoveValue() 坏事?

asp.net-mvc - 激活 HttpContext 时出错 - 有多个匹配的绑定(bind)可用

c# - 通过 Entity Framework 更新时如何绕过唯一键约束(使用 dbcontext.SaveChanges())

asp.net-mvc-3 - 复杂类型的可选[必需]

c# - RequiredIf 没有触发客户端验证

asp.net-mvc - 更改数据注释中的验证消息