gpt4 book ai didi

c# - 保存具有所有必需属性的对象时出现 Entity Framework 验证错误

转载 作者:行者123 更新时间:2023-11-30 21:52:10 25 4
gpt4 key购买 nike

我有以下模型:

[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; }
}

Event 和 User 也是模型,我将它们设置为 [Required] 因为我希望数据库字段不可为空(代码优先)。

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

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 属性表示其他链接对象,在调试期间,就在保存之前,我可以看到它们已填充。

为什么会出现这些错误?是否不推荐代表其他模型的虚拟属性具有 [Required]?

最佳答案

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

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 来强制执行所需的要求。

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

关于c# - 保存具有所有必需属性的对象时出现 Entity Framework 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35024816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com