Coding
public virtual int Update(T entity, params Expression<func<t, object="">>[] properties)
{
if (entity.Id < 1)
{
return Insert(entity).Id;
}
if (properties?.Any() == true)
{
_dbContext.Attach(entity);
foreach (var prop in properties)
{
_dbContext.Entry(entity).Property(prop).IsModified = true;
}
}
else
{
_dbContext.Entry(entity).State = EntityState.Modified;
}
return _dbContext.SaveChanges();
}
public virtual int Update(T entity, object replaceBy)
{
if (entity.Id < 1)
{
return Insert(entity).Id;
}
if (replaceBy == null)
{
return _dbContext.SaveChanges();
}
var properties = replaceBy.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
if (properties?.Any() == true)
{
foreach (var prop in properties)
{
var valueOfProp = prop.GetValue(replaceBy, null);
var propOfEntity = entity.GetType().GetProperty(prop.Name);
propOfEntity.SetValue(entity, Convert.ChangeType(valueOfProp, propOfEntity.PropertyType), null);
_dbContext.Entry(entity).Property(propOfEntity.Name).IsModified = true;
}
}
else
{
_dbContext.Entry(entity).State = EntityState.Modified;
}
return _dbContext.SaveChanges();
}
</func<t,>
Using
var contact = new Contact { Id = 1, FullName = "Le Thanh Tuan" };
var rs1 = contactService.Update(contact, x => x.FullName);
var rs2 = contactService.Update(contact, new
{
Id = 1,
Phone = "0976060432",
UserName = "tuanitpro",
FullName = "Le Thanh Tuan"
});