Usé Shimmy's solution y me complació hasta que descubrí que las cadenas en mis tipos complejos se estaban perdiendo. En otras palabras, necesitaba una forma de anular las cadenas de espacios en blanco anulables no solo en mi objeto/registro central, sino en cualquiera de sus propiedades de objetos no primitivos, y de ellos, y de ellos ...
El siguiente es mi adaptación recursiva. No puedo hablar de su elegancia o calidad de producción porque no ha sido en vivo por mucho tiempo, pero parece estar funcionando para mí hasta ahora y al menos puede servir como punto de partida para otra persona.
using System.Data.Entity;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Infrastructure;
using System.Linq;
public class MyDataContext : DbContext
{
public override int SaveChanges()
{
ObjectStateEntry[] savingObjectStateEntries = ((IObjectContextAdapter)this)
.ObjectContext.ObjectStateManager
.GetObjectStateEntries(EntityState.Added | EntityState.Modified).ToArray();
foreach (ObjectStateEntry savingObjectStateEntry in savingObjectStateEntries)
SetEmptyStringsToNull(savingObjectStateEntry.CurrentValues);
return base.SaveChanges();
}
private static void SetEmptyStringsToNull(CurrentValueRecord currentValueRecord)
{
if (currentValueRecord != null)
for (int i = 0; i < currentValueRecord.FieldCount; i++)
if (currentValueRecord[i] is CurrentValueRecord)
SetEmptyStringsToNull(currentValueRecord[i] as CurrentValueRecord);
else if ((currentValueRecord[i] is string)
&& (currentValueRecord.DataRecordInfo.FieldMetadata[i].FieldType as EdmProperty).Nullable
&& string.IsNullOrWhiteSpace(currentValueRecord[i] as string))
currentValueRecord.SetValue(i, null);
}
}
de otro foro me dieron esta respuesta http://msdn.microsoft.com/en-us/library/vstudio/ms366709(v=vs.100).aspx (ConvertEmptyStringToNull propiedad) – Naomi
Hola Naomi, me Me alegra que lo hayas encontrado, ¿por qué no hacer una respuesta tuya? – Shimmy