public void UpdateMatchEntity(T updateEntity, T setEntity, bool isEncrypt = false) { //updateEntity: Varolan hali, setEntity: Güncellenmiş hali if (setEntity == null) { throw new ArgumentNullException(nameof(setEntity)); } if (updateEntity == null) { throw new ArgumentNullException(nameof(updateEntity)); } if (updateEntity is IAuditable) { InsertElastic(updateEntity, "Update", _elasticConfig.Value.ElasticAuditIndex); } _context.Entry(updateEntity).CurrentValues.SetValues(setEntity);//Tüm kayıtlar, kolon eşitlemesine gitmeden bir entity'den diğerine atanır. foreach (var property in _context.Entry(setEntity).Properties) { if (property.CurrentValue == null) { _context.Entry(updateEntity).Property(property.Metadata.Name).IsModified = false; } } if (isEncrypt) { updateEntity = UpdateEncryptedEntityFieldIfChange(updateEntity); } _context.SaveChanges(); }
public virtual T DecryptEntityFields(T entity, DevnotContext _dbcontext) { MetadataTypeAttribute[] metadataTypes = entity.GetType().GetCustomAttributes(true).OfType <MetadataTypeAttribute>().ToArray(); foreach (MetadataTypeAttribute metadata in metadataTypes) { System.Reflection.PropertyInfo[] properties = metadata.MetadataClassType.GetProperties(); //Metadata atanmış entity'nin tüm propertyleri tek tek alınır. foreach (System.Reflection.PropertyInfo pi in properties) { //Eğer ilgili property ait CryptoData flag'i var ise ilgili deger Decrypt edilir. if (Attribute.IsDefined(pi, typeof(DAL.PartialEntites.CryptoData))) { _dbcontext.Entry(entity).Property(pi.Name).CurrentValue = _encryption.DecryptText(_dbcontext.Entry(entity).Property(pi.Name).CurrentValue.ToString()); } } } return(entity); }