Let’s assume you have the following model with a non-required string property. While you are trying to save this object in your Db using Entity Framework you may see that the string property in your record will not be `Null` but “ (empty string).
To overcome this you need to override `SaveChages`, `SaveChangesAsync` method in your DbContext indicating that all string properties with empty values should be of `Null` value.
The following code may do the trick:
public override Task<int> SaveChangesAsync() { var objContext = ((IObjectContextAdapter)this).ObjectContext; var entries = objContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified) .Select(entry => entry.Entity); var str = typeof(string).Name; foreach (var entity in entries) { var properties = from p in entity.GetType().GetProperties() where p.PropertyType.Name == str select p; var items = from item in properties let value = (string)item.GetValue(entity, null) where value != null && value.Trim().Length == 0 select item; foreach (var item in items) { item.SetValue(entity, null, null); } } return base.SaveChangesAsync(); }
The reason why EF will not replace an empty string on a property with a null value appears to be a consequence of the data validation feature which both EF5 and EF6 use by default on DbContext.SaveChanges().