Entity Framework 5 - Why is Entity State “Modified” after PropertyValue is set back to Original

后端 未结 3 1916
长发绾君心
长发绾君心 2021-01-11 23:59

i use the EF5 and don\'t know why a entity has the state \"modified\" after i set the only changed PropertyValue of this entity back to the original value.

         


        
3条回答
  •  佛祖请我去吃肉
    2021-01-12 00:29

    Because Entity Framework only keeps track if the data got modified, not if it's different from it's original content.

    We use a nifty method to reset the state to unmodified when the entity is unchanged:

        public static void CheckIfModified(EntityObject entity, ObjectContext context)
        {
            if (entity.EntityState == EntityState.Modified)
            {
                ObjectStateEntry state = context.ObjectStateManager.GetObjectStateEntry(entity);
                DbDataRecord orig = state.OriginalValues;
                CurrentValueRecord curr = state.CurrentValues;
    
                bool changed = false;
                for (int i = 0; i < orig.FieldCount && !changed; ++i)
                {
                    object origValue = orig.GetValue(i);
                    object curValue = curr.GetValue(i);
                    if (!origValue.Equals(curValue) && (!(origValue is byte[]) || !((byte[])origValue).SequenceEqual((byte[])curValue)))
                    {
                        changed = true;
                    }
                }
    
                if (!changed)
                {
                    state.ChangeState(EntityState.Unchanged);
                }
            }
        }
    

    Please note that this method is for EF 4.0, not for the newer versions with DbContext. But it is no problem to rewrite it to use EF 4.1+, I have done this myself already but I can't find the code right now.

提交回复
热议问题