我试图简单地加载一个实体,修改一个属性,然后将其保存回数据库。
var db = new NewsletterContext();
var newsletter = db.Newsletters.Find(x => x.ID==newsletterID);
newsletter.SomeProperty = 5;
db.SaveChanges();
这会导致验证错误,因为时事通讯对象上有一些属性是必需的,但当我执行以下操作时显然未加载Find()
.
我可以使用Include()
对于每个必需的属性,后跟Where()
:
var db = new NewsletterContext();
var newsletter = db.Newsletters.Include(x => x.RequiredProp1)
.Include(x => x.RequiredProp2).Include(x => x.RequiredProp3)
.Where(x => x.ID==newsletterID)
.FirstOrDefault();
db.SaveChanges();
这不是一个非常优雅的解决方案,如果我向Newsletter
目的。
有更好的解决方案吗?
实体框架将在进行验证时禁用延迟加载。因此,如果您对导航属性进行必要的验证,验证将会失败。您可以改为装饰与导航属性相关的标量属性。
public class Foo
{
[Required]
public int? RequiredScalarId { get; set; }
public virtual Bar RequiredNavigationalProp { get; set; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)