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().

Categorized in:

Tagged in: