Ho usato Shimmy's solution e sono stato contento fino a quando ho scoperto che le stringhe nei miei tipi complessi erano mancate. In altre parole, avevo bisogno di un modo per azzerare le stringhe nullabili solo per lo spazio non solo del mio oggetto/record principale, ma di tutte le sue proprietà dell'oggetto non primitive, e loro e loro ...
Di seguito è riportato il mio adattamento ricorsivo. Non posso parlare con la sua eleganza o qualità di produzione perché non è vissuto per molto tempo, ma sembra che funzioni per me finora e possa almeno servire da punto di partenza per qualcun altro.
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);
}
}
fonte
2017-03-12 20:00:00
da un altro forum ho avuto questa risposta http://msdn.microsoft.com/en-us/library/vstudio/ms366709(v=vs.100).aspx (ConvertEmptyStringToNull proprietà) – Naomi
Ciao Naomi, io Sono contento che tu l'abbia trovato, perché non fai una tua risposta? – Shimmy