我一直在尝试使用以下代码更新实体:
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);
如果要在实体中获得ParentId
属性,则需要确保数据库中每一行的该列中都有一个有效值。使用“有效值”是指它应该与默认值不同,并且应在表中作为PK存在。Required
Tableau
DataTree
一种将相关实体作为查询加载的Include
方法是使用扩展方法:
var data = db.Tableau.Include(t=>t.Parent).FirstOrDefault(t=>t.Id==Id);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句