我有以下型号:
[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."
用户和事件属性代表其他链接对象,在调试期间,在保存之前,我可以看到它们已填充。
为什么我会收到这些错误?对于不建议使用其他模型的虚拟属性是否具有[必需]?
答案 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将通过确保已设置外键UserId
和EventId
来强制执行所需的要求。
请注意,您可能希望更改模型中这些属性的名称以匹配数据库中的属性,以便模型与数据库中的表结构匹配。