-
-
Save albertbori/e95860644e69c1572441 to your computer and use it in GitHub Desktop.
| public class MyDB : IdentityDbContext<User> | |
| { | |
| //DBSet properties go here | |
| public MyDB() | |
| { | |
| ((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += new ObjectMaterializedEventHandler(ObjectMaterialized); | |
| } | |
| #region Encryption | |
| public override int SaveChanges() | |
| { | |
| var contextAdapter = ((IObjectContextAdapter)this); | |
| contextAdapter.ObjectContext.DetectChanges(); //force this. Sometimes entity state needs a handle jiggle | |
| var pendingEntities = contextAdapter.ObjectContext.ObjectStateManager | |
| .GetObjectStateEntries(EntityState.Added | EntityState.Modified) | |
| .Where(en => !en.IsRelationship).ToList(); | |
| foreach (var entry in pendingEntities) //Encrypt all pending changes | |
| EncryptEntity(entry.Entity); | |
| int result = base.SaveChanges(); | |
| foreach (var entry in pendingEntities) //Decrypt updated entities for continued use | |
| DecryptEntity(entry.Entity); | |
| return result; | |
| } | |
| public override async Task<int> SaveChangesAsync(System.Threading.CancellationToken cancellationToken) | |
| { | |
| var contextAdapter = ((IObjectContextAdapter)this); | |
| contextAdapter.ObjectContext.DetectChanges(); //force this. Sometimes entity state needs a handle jiggle | |
| var pendingEntities = contextAdapter.ObjectContext.ObjectStateManager | |
| .GetObjectStateEntries(EntityState.Added | EntityState.Modified) | |
| .Where(en => !en.IsRelationship).ToList(); | |
| foreach (var entry in pendingEntities) //Encrypt all pending changes | |
| EncryptEntity(entry.Entity); | |
| var result = await base.SaveChangesAsync(cancellationToken); | |
| foreach (var entry in pendingEntities) //Decrypt updated entities for continued use | |
| DecryptEntity(entry.Entity); | |
| return result; | |
| } | |
| void ObjectMaterialized(object sender, ObjectMaterializedEventArgs e) | |
| { | |
| DecryptEntity(e.Entity); | |
| } | |
| private void EncryptEntity(object entity) | |
| { | |
| //Get all the properties that are encryptable and encrypt them | |
| var encryptedProperties = entity.GetType().GetProperties() | |
| .Where(p => p.GetCustomAttributes(typeof(Encrypted), true).Any(a => p.PropertyType == typeof(String))); | |
| foreach (var property in encryptedProperties) | |
| { | |
| string value = property.GetValue(entity) as string; | |
| if (!String.IsNullOrEmpty(value)) | |
| { | |
| string encryptedValue = EncryptionService.Encrypt(value); | |
| property.SetValue(entity, encryptedValue); | |
| } | |
| } | |
| } | |
| private void DecryptEntity(object entity) | |
| { | |
| //Get all the properties that are encryptable and decyrpt them | |
| var encryptedProperties = entity.GetType().GetProperties() | |
| .Where(p => p.GetCustomAttributes(typeof(Encrypted), true).Any(a => p.PropertyType == typeof(String))); | |
| foreach (var property in encryptedProperties) | |
| { | |
| string encryptedValue = property.GetValue(entity) as string; | |
| if (!String.IsNullOrEmpty(encryptedValue)) | |
| { | |
| string value = EncryptionService.Decrypt(encryptedValue); | |
| this.Entry(entity).Property(property.Name).OriginalValue = value; | |
| this.Entry(entity).Property(property.Name).IsModified = false; | |
| } | |
| } | |
| } | |
| #endregion Encryption | |
| } |
Something wrong with this code and attribute.
modelBuilder.UseEncryption(this._provider); - this._provider always null while attempt to create migration.
Version 3.0 is on the way. It will fix the issue : SoftFluent/EntityFrameworkCore.DataEncryption#25
Thanks. I will try tomorrow :) This needs for me
Im using MyDB.cs code Below is my code for search. But still not able to filter transactions = db.OverseasAttractionTransactions.Where(t => t.CrOrderNumber.ToLower().Contains(searchKeyword) || t.CustomerEmail.ToLower().Contains(searchKeyword) || (t.CustomerFirstName).ToLower().Contains(searchKeyword) || t.CustomerLastName.ToLower().Contains(searchKeyword) || t.CustomerNricOrPassport.ToLower().Contains(searchKeyword) || t.CustomerPhoneNumber.ToLower().Contains(searchKeyword) || t.DiscountCode.ToLower().Contains(searchKeyword) || t.ReferenceNumber.ToLower().Contains(searchKeyword)) .OrderBy(t => t.PurchaseDateTime).ToList();
@Eastrall can you answer this question please i cant search on contains filter
It's not working. I can't create provider and can't make migration.