随机EntityValidationErrors(必填字段)

威特潜艇

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

var db = new MyContext();

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

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

问题是我的Tableaus表有一个Parent字段(FK对DataTree表不是null)。有时,当我将更改保存到此已编辑的记录时,会收到一条错误消息,提示“必填字段”。但是我不是在编辑“父”字段。父字段应该完整无缺,因为我仅更改了Name和EmbedCode字段。

如何进行?提前致谢。

八叶球菌

那是因为您允许null中的ParentId列中的Tableaus,但是在您的Tableau实体中,您具有ParentId不可空的属性(这意味着需要该关系),并且当您Tableau从数据库加载实例时,EF希望您设置该值财产。尝试将该属性更改为可为空:

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属性,则需要确保数据库中每一行的该列中都有一个有效值。使用“有效值”是指它应该与默认值不同,并且应在表中作为PK存在RequiredTableauDataTree

更新2:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章