保存具有所有必需属性的对象时,实体框架验证错误

时间:2016-01-26 21:57:38

标签: c# entity-framework

我有以下型号:

[Table("EventUserDetails")]
public class EventUserDetail
{
    [Key]
    public int Id { get; set; }
    public bool Invited { get; set; }
    public DateTime? InviteDate { get; set; }
    [Required]
    public virtual User User { get; set; }
    [Required]
    public virtual Event Event { get; set; }
}

事件和用户也是模型,我将它们设置为[必需],因为我希望db字段不可为空(代码优先)。

如果我从数据库中获取对象并尝试保存它:

EventUserDetail de = db.EventUserDetails.Where(m => m.Id == id).Single();
de.Invited = true;
db.SaveChanges();

我收到错误:

- Property: "User", Error: "The User field is required."
- Property: "Event", Error: "The Event field is required."

用户和事件属性代表其他链接对象,在调试期间,在保存之前,我可以看到它们已填充。

为什么我会收到这些错误?对于不建议使用其他模型的虚拟属性是否具有[必需]?

1 个答案:

答案 0 :(得分:3)

您可以在模型中包含外键,并指定外键本身是必需的,如下所示:

public class EventUserDetail
{
    [Key]
    public int Id { get; set; }
    public bool Invited { get; set; }
    public DateTime? InviteDate { get; set; }

    [Required]
    [ForeignKey("User")]
    public int UserId { get; set; }

    public virtual User User { get; set; }

    [Required]
    [ForeignKey("Event")]
    public int EventId { get; set; }

    public virtual Event Event { get; set; }
}

这将允许您在不加载相关实体的情况下更新模型。 EF将通过确保已设置外键UserIdEventId来强制执行所需的要求。

请注意,您可能希望更改模型中这些属性的名称以匹配数据库中的属性,以便模型与数据库中的表结构匹配。