protected override bool ValidateSave()
{
base.ValidateSave();
// Create a sandbox to do the validation in.
var em = new EntityManager(EntityManager);
em.CacheStateManager.RestoreCacheState(EntityManager.CacheStateManager.GetCacheState());
// Find all entities supporting custom validation
var entities =
em.FindEntities(EntityState.AllButDetached).OfType<EntityBase>().ToList();
foreach (var e in entities)
{
var entityAspect = EntityAspect.Wrap(e);
if (entityAspect.EntityState.IsDeletedOrDetached()) continue;
var validationErrors = new VerifierResultCollection();
e.Validate(validationErrors);
validationErrors =
new VerifierResultCollection(entityAspect.ValidationErrors.Concat(validationErrors.Errors));
validationErrors.Where(vr => !entityAspect.ValidationErrors.Contains(vr))
.ForEach(entityAspect.ValidationErrors.Add);
if (validationErrors.HasErrors)
throw new EntityServerException(validationErrors.Select(v => v.Message).ToAggregateString("\n"),
null,
PersistenceOperation.Save, PersistenceFailure.Validation);
}
return true;
}
}