0

I am trying to update an entity by efcore 2.1.1

I don't want update two cols : "CreatedAt","CreatedBy" so I write a virtual function , I set column 'CreatedAt' a value, and then I exec my function to update, It's just like :

       public virtual int Update(TDto model, HashSet<string> ignoreColumns = null)
    {
        if (ignoreColumns.IsNull()) ignoreColumns = new HashSet<string>();

        ignoreColumns.Add(CreatedAt);

        ignoreColumns.Add(CreatedBy);

        var entity = mapper.Map<T>(model);

        entity = SetModifyDefaultValue(entity);

        dbcontext.Attach(entity);

        var temp = dbcontext.Entry(entity);

        if (!temp.IsKeySet)
        {
            throw new ArgumentException(ParamName);
        }

        if (ignoreColumns.Count > 0)
        {
            foreach (var item in ignoreColumns)
            {
                var ignoreColumn = temp.Property(item);
                if (ignoreColumn != null)
                {
                    ignoreColumn.IsModified = false;
                }
            }
        }

       temp.State = Microsoft.EntityFrameworkCore.EntityState.Modified;

        return dbcontext.SaveChanges();
    }


       protected T SetModifyDefaultValue(T entity)
    {
        var properties = entity.GetType().GetProperties();
        var lastModifiedAt = properties.FirstOrDefault(t => t.Name.Equals(LastModifiedAt, StringComparison.InvariantCultureIgnoreCase));
        if (lastModifiedAt != null)
        {
            lastModifiedAt.SetValue(entity, DateTimeOffset.UtcNow);
        }
        var lastModifiedBy = properties.FirstOrDefault(t => t.Name.Equals(LastModifiedBy, StringComparison.InvariantCultureIgnoreCase));
        if (lastModifiedBy != null)
        {
            lastModifiedBy.SetValue(entity, uid);
        }

        return entity;
    }

but this function still updated this two fields

before exec

after exec

someone has solution?

Hal Tan
  • 1
  • 1

0 Answers0