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);
 }