Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

The entity framework will only save properties it detects has changed via its proxy classes. I have a situation where I want a property to always be saved no matter if it changed or not.

I wrote a blank attribute called 'AlwaysUpdate' which I apply to the property. I then overrode SaveChanges to scan for these attributes and mark the field as Modified. Is this code all right?

    public override int SaveChanges()
    {
        var changeSet = ChangeTracker.Entries();
        if (changeSet != null)
        {
            foreach (var entry in changeSet.Where( c=> c.State == System.Data.EntityState.Modified ))
            {
                foreach (var prop in entry.Entity.GetType().GetProperties().Where(p => p.GetCustomAttributes(typeof(AlwaysUpdateAttribute), true).Count() > 0).Select( p => p.Name ))
                {
                    if (entry.State == System.Data.EntityState.Added || entry.State == System.Data.EntityState.Unchanged) continue;
                    // Try catch removes the errors for detached and unchanged items
                    try
                    {
                        entry.Property(prop).IsModified = true;
                    }
                    catch { }
                }
            }
        }
        return base.SaveChanges();
    }
share|improve this question
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.