Modifying a property on an entity in Entity Framework causes validation error

删除回忆录丶 提交于 2019-12-20 02:54:58

问题


I am trying to simply load an entity, modify a property and then save it back to the database.

var db = new NewsletterContext();
var newsletter  = db.Newsletters.Find(x => x.ID==newsletterID); 
newsletter.SomeProperty = 5;
db.SaveChanges();

This causes a validation error as there are some properties on the newsletter object which are required and apparently not loaded when I do a Find().

I can solve this using an Include() for each required property followed by a 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();

This isn't a very elegant solution and will break if I add more required properties to the Newsletter object.

Is there a better solution?


回答1:


Entity framework will disable lazy loading when doing the validation. Hence if you put required validation on navigational properties the validation will fail. You can decorate the scalar property related to the navigational property instead.

public class Foo
{

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

    public virtual Bar RequiredNavigationalProp { get; set; }
}



回答2:


Do not want to pollute your model with foriegn keys? Good! Read on. Instead you can override the SaveChanges method in NewsletterContext. Get all modified entities and using reflection, load all their lazy loaded properties and collections using the following sample syntax:

db.Entry(newsletter).Reference(n => n.RequiredProp1).Load();
db.Entry(newsletter).Collection(n => n.RequiredCollec1).Load();

It won't be easy as it sounds, but once you are have written it, it would feel so good to see it work seamlessly :)



来源:https://stackoverflow.com/questions/8784005/modifying-a-property-on-an-entity-in-entity-framework-causes-validation-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!