随机EntityValidationErrors(该字段是必需的)

时间:2016-01-25 16:45:21

标签: asp.net asp.net-mvc entity-framework

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

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字段。

如何进行?提前谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为您在null表中的ParentId列中允许Tableaus个值,但在您的Tableau实体中,您ParentId为非nullable属性(这意味着需要关系),当您从数据库加载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实体中的Required属性为Tableau,则需要确保每行数据库中该列的有效值。使用“有效值”,我的意思是它应该与默认值不同,它应该在DataTree表中以PK的形式存在。

更新2:

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

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