修改Entity Framework中实体的属性会导致验证错误

Jud*_*udo 2 c# entity-framework entity-framework-4 ef-code-first

我试图简单地加载一个实体,修改一个属性,然后将其保存回数据库.

var db = new NewsletterContext();
var newsletter  = db.Newsletters.Find(x => x.ID==newsletterID); 
newsletter.SomeProperty = 5;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这会导致验证错误,因为新闻稿对象上有一些属性是必需的,当我这样做时显然没有加载Find().

我可以使用Include()for每个必需的属性来解决这个问题,然后是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();
Run Code Online (Sandbox Code Playgroud)

这不是一个非常优雅的解决方案,如果我向Newsletter对象添加更多必需属性,它将会中断.

有更好的解决方案吗?

Era*_*nga 6

实体框架将在执行验证时禁用延迟加载.因此,如果您对导航属性进行必要的验证,则验证将失败.您可以改为装饰与导航属性相关的标量属性.

public class Foo
{

    [Required]
    public int? RequiredScalarId { get; set; }

    public virtual Bar RequiredNavigationalProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)