保存具有所有必需属性的对象时出现实体框架验证错误
本文关键字:实体 验证 错误 框架 保存 属性 对象 | 更新日期: 2023-09-27 18:32:04
我有以下模型:
[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; }
}
事件和用户也是模型,我将它们设置为 [必需],因为我希望数据库字段不可为空(代码优先)。
如果我从数据库中获取一个对象并尝试保存它:
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."
User 和 Event 属性表示其他链接对象,在调试期间,就在保存之前,我可以看到它们已填充。
为什么我会收到这些错误? 是否不建议对代表其他模型的虚拟属性具有 [必需]?
您可以在模型中包括外键,并指定外键本身是必需的,如下所示:
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 将通过确保已设置外键UserId
和EventId
来强制满足所需的要求。
请注意,您可能希望更改模型中这些属性的名称以匹配数据库中的属性,以便模型与数据库中的表结构匹配。