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
someone has solution?