gpt4 book ai didi

asp.net - 随机 EntityValidationErrors(该字段是必需的)

转载 作者:行者123 更新时间:2023-12-02 03:18:32 25 4
gpt4 key购买 nike

我一直在尝试使用以下代码更新实体:

var db = new MyContext();

var data = db.Tableau.Find(Id);

if (data != null)
{
data.Name = model.Name;
data.EmbedCode = model.EmbedCode;
db.SaveChanges();
}

问题是我的 Tableaus 表有一个父字段(对于 DataTree 表来说 FK 不为空)。有时,当我保存对此已编辑记录的更改时,会收到一条错误消息,提示“需要父字段”。但我没有编辑 Parent 字段。父字段应该完整且存在,因为我只是更改了 Name 和 EmbedCode 字段。

如何进行?提前致谢。

最佳答案

那是因为您在 Tableaus 表的 ParentId 列中允许 null 值,但在您的 Tableau 实体,您将 ParentId 作为不可空属性(这意味着关系是必需的),当您从数据库加载 Tableau 实例时,EF 期望您设置那属性(property)也是。尝试将该属性更改为可为空:

public int? ParentId {get;set;}

如果您使用 Fluent Api 配置您的关系,它将是:

modelBuilder.Entity<Tableau>()
.HasOptional(t=>t.Parent)
.WithMany(dt=>dt.Tablous)// if you don't have a collection nav. property in your DataTree entity, you can call this method without parameter
.HasForeignKey(t=>t.ParentId);

更新1

如果您希望 ParentId 属性在您的 Tableau 实体中作为 Required,您需要确保该列中的值有效在你的数据库中每一行。对于“有效值”,我的意思是它应该不同于默认值,并且它应该作为 PK 存在于您的 DataTree 表中。

更新 2:

将相关实体作为查询的一部分加载的一种方法是使用 Include 扩展方法:

var data = db.Tableau.Include(t=>t.Parent).FirstOrDefault(t=>t.Id==Id);

关于asp.net - 随机 EntityValidationErrors(该字段是必需的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997779/

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