这似乎是CodeFirst的一个非常奇怪的行为,
我有一张桌子:
public string Name {get;set;}
[Required]
public virtual Table1 Table1 {get;set;}
[Required]
public virtual Table2 Table2 {get;set;}
[Required]
public virtual Table3 Table3 {get;set;}
现在如果我从数据库中得到一行,如下所示:
var row = database.Include("Table1").First();
row.name = "New name";
row.Table1.name = "New name";
database.SaveChanges();
它会抛出2个错误:
Table2 : The Table2 field is required.
Table3 : The Table3 field is required.
问题是,为什么要验证那两个未加载的未使用的引用?
我不想加载ENTIRE实体,因为一些实体可以有很多引用,只需要更新1个字段。
答案 0 :(得分:1)
如果您使用Required
属性标记任何内容,则在保存更改时需要存在。 EF始终在保存期间验证整个实体,并且导航属性的处理方式与普通属性=>相同。 null =异常。验证也不会触发设计延迟加载。
您的选择是:
Required
属性