这似乎是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();
它将抛出两个错误:
Table2 : The Table2 field is required.
Table3 : The Table3 field is required.
问题是,为什么它要验证这两个未加载的未使用的引用?
我不喜欢加载整个实体,因为一些实体可能有很多引用,只更新1个字段。
发布于 2012-08-08 21:08:29
如果您使用Required
属性标记任何内容,则在保存更改时它必须存在。EF总是在保存期间验证整个实体,并且导航属性的处理方式与正常属性=> null = exception相同。验证在设计上也不会触发延迟加载。
您可以选择:
Required
属性可以是
https://stackoverflow.com/questions/11865069
复制相似问题