コード例 #1
0
        private void OnSaving(object sender, EntitySavingEventArgs e)
        {
            if (IsSaving)
            {
                throw new InvalidOperationException(
                          StringResources.ThisEntityManagerIsCurrentlyBusyWithAPreviousSaveChangeAsync);
            }
            IsSaving = true;

            try
            {
                Validate(e);
                if (e.Cancel)
                {
                    IsSaving = false;
                    return;
                }

                var syncEntities = e.Entities.Where(SyncInterceptor.ShouldExportEntity);
                RetainDeletedEntityKeys(syncEntities);
            }
            catch (Exception)
            {
                IsSaving = false;
                throw;
            }
        }
コード例 #2
0
        public void Should_Assign_Correct_Session_Arg()
        {
            var session = new Mock <ISession>().Object;
            var entity  = new Mock <IEntity>().Object;

            var args = new EntitySavingEventArgs(entity, session);

            Assert.AreEqual(args.Session, session);
            Assert.AreEqual(args.Entity, entity);
        }
コード例 #3
0
 private void OnEntitySave(EntitySavingEventArgs args)
 {
     using (var container = ContextScopeProvider.CreateChildContainer())
     {
         if (args.Session == null || args.Session.IsDirtyEntity(args.Entity))
         {
             var tracker = container.Resolve <IEntityTrackingService>();
             tracker.OnEntityUpdate(args.Entity);
         }
     }
 }
コード例 #4
0
        public override void OnSaving(TempHireEntities source, EntitySavingEventArgs args)
        {
            // Add necessary aggregate root object to the save list for validation and concurrency check
            List <EntityAspect> rootEas = args.Entities.OfType <IHasRoot>()
                                          .Select(e => EntityAspect.Wrap(e.Root))
                                          .Distinct()
                                          .Where(ea => ea != null && !ea.IsChanged && !ea.IsNullOrPendingEntity)
                                          .ToList();

            rootEas.ForEach(ea => ea.SetModified());
            rootEas.ForEach(ea => args.Entities.Add(ea.Entity));
        }
コード例 #5
0
        private void Validate(EntitySavingEventArgs args)
        {
            var allValidationErrors = new VerifierResultCollection();

            foreach (var entity in args.Entities)
            {
                var entityAspect = EntityAspect.Wrap(entity);
                if (entityAspect.EntityState.IsDeletedOrDetached())
                {
                    continue;
                }

                var validationErrors = Manager.VerifierEngine.Execute(entity);
                foreach (var d in _configuration.Delegates ?? new EntityManagerDelegate <T> [0])
                {
                    d.Validate(entity, validationErrors);
                }
                // Extract only validation errors
                validationErrors = validationErrors.Errors;

                validationErrors.Where(vr => !entityAspect.ValidationErrors.Contains(vr))
                .ForEach(entityAspect.ValidationErrors.Add);

                validationErrors.ForEach(allValidationErrors.Add);
            }

            if (allValidationErrors.HasErrors)
            {
                if (!ValidationErrorNotifiers.Any())
                {
                    throw new ValidationException(allValidationErrors.Select(v => v.Message).ToAggregateString("\n"));
                }

                ValidationErrorNotifiers.ForEach(s => s.OnValidationError(allValidationErrors));
                args.Cancel = true;
            }
        }
コード例 #6
0
 public virtual void OnRecordSaved(object sender, EntitySavingEventArgs <T> e)
 {
 }
コード例 #7
0
 public virtual void OnBeforeSavingRecord(object sender, EntitySavingEventArgs <T> e)
 {
 }
コード例 #8
0
 void Instance_EntitySaving(EntitySavingEventArgs args)
 {
     firedSave++;
 }
コード例 #9
0
 public override void OnBeforeSavingRecord(object sender, EntitySavingEventArgs <Bank> e)
 {
     base.OnBeforeSavingRecord(sender, e);
 }