protected virtual async Task EntityIsPersistentAsync(PersistEvent @event, IDictionary createCache, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            log.Debug("ignoring persistent instance");
            IEventSource source = @event.Session;

            //TODO: check that entry.getIdentifier().equals(requestedId)
            object entity = source.PersistenceContext.Unproxy(@event.Entity);

            /* NH-2565: the UnProxy may return a "field interceptor proxy". When EntityName is null the session.GetEntityPersister will try to guess it.
             * Instead change a session's method I'll try to guess the EntityName here.
             * Because I'm using a session's method perhaps could be better if each session's method, which implementation forward to a method having the EntityName as parameter,
             * use the BestGuessEntityName directly instead do "70 turns" before call it.
             */
            if (@event.EntityName == null)
            {
                @event.EntityName = source.BestGuessEntityName(entity);
            }
            IEntityPersister persister = source.GetEntityPersister(@event.EntityName, entity);

            object tempObject;

            tempObject          = createCache[entity];
            createCache[entity] = entity;
            if (tempObject == null)
            {
                //TODO: merge into one method!
                await(CascadeBeforeSaveAsync(source, persister, entity, createCache, cancellationToken)).ConfigureAwait(false);
                await(CascadeAfterSaveAsync(source, persister, entity, createCache, cancellationToken)).ConfigureAwait(false);
            }
        }
		protected virtual void EntityIsPersistent(PersistEvent @event, IDictionary createCache)
		{
			log.Debug("ignoring persistent instance");
			IEventSource source = @event.Session;

			//TODO: check that entry.getIdentifier().equals(requestedId)
			object entity = source.PersistenceContext.Unproxy(@event.Entity);
			/* NH-2565: the UnProxy may return a "field interceptor proxy". When EntityName is null the session.GetEntityPersister will try to guess it.
			 * Instead change a session's method I'll try to guess the EntityName here.
			 * Because I'm using a session's method perhaps could be better if each session's method, which implementation forward to a method having the EntityName as parameter,
			 * use the BestGuessEntityName directly instead do "70 turns" before call it.
			*/
			if (@event.EntityName == null)
			{
				@event.EntityName = source.BestGuessEntityName(entity);
			}
			IEntityPersister persister = source.GetEntityPersister(@event.EntityName, entity);

			object tempObject;
			tempObject = createCache[entity];
			createCache[entity] = entity;
			if (tempObject == null)
			{
				//TODO: merge into one method!
				CascadeBeforeSave(source, persister, entity, createCache);
				CascadeAfterSave(source, persister, entity, createCache);
			}
		}
Esempio n. 3
0
 public void RimuoviUtente(string utente)
 {
     if (_blacklist.EliminaUtenteCattivo(utente))
     {
         //Creazione del parametro da passare quando scateno l'evento
         ActionCompletedEvent args = new ActionCompletedEvent
         {
             ToEntry = EntryFactory.CreateEntry(this, "rimosso", utente)
         };
         //scateno gli handler registrati all'evento
         PersistEvent toPersist = new PersistEvent
         {
             Action    = "rimuovi",
             ToPersist = utente
         };
         //scateno gli handler registrati all'evento
         ToLog?.Invoke(this, args);
         Persist?.Invoke(this, toPersist);
     }
     else
     {
         //Creazione del parametro da passare quando scateno l'evento
         ActionCompletedEvent args = new ActionCompletedEvent
         {
             ToEntry = EntryFactory.CreateEntry(this, "nonrimosso", utente)
         };
         //scateno gli handler registrati all'evento
         ToLog?.Invoke(this, args);
     }
 }
        /// <summary> Handle the given create event. </summary>
        /// <param name="event">The save event to be handled. </param>
        /// <param name="createCache"></param>
        /// <param name="cancellationToken">A cancellation token that can be used to cancel the work</param>
        protected virtual Task EntityIsTransientAsync(PersistEvent @event, IDictionary createCache, CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(Task.FromCanceled <object>(cancellationToken));
            }
            try
            {
                log.Debug("saving transient instance");

                IEventSource source = @event.Session;
                object       entity = source.PersistenceContext.Unproxy(@event.Entity);

                object tempObject;
                tempObject          = createCache[entity];
                createCache[entity] = entity;
                if (tempObject == null)
                {
                    return(SaveWithGeneratedIdAsync(entity, @event.EntityName, createCache, source, false, cancellationToken));
                }
                return(Task.CompletedTask);
            }
            catch (Exception ex)
            {
                return(Task.FromException <object>(ex));
            }
        }
Esempio n. 5
0
 public void OnPersist(PersistEvent @event, IDictionary createdAlready)
 {
     if (@event.Entity is DbObject dbObject)
     {
         dbObject.Session = @event.Session;
     }
 }
Esempio n. 6
0
 public void AggiungiUtente(string utente)
 {
     if (_blacklist.AggiungiUtenteCattivo(utente))
     {
         //Col fatto che questa viene chiamata dal thread della sincronizzazione va
         //Risolto con l'escamotage
         _blacklistView.AddRow(utente);
         //_blacklistView.DataGridViewBlacklist.Rows.Add(utente);
         //Creazione del parametro da passare quando scateno l'evento
         ActionCompletedEvent args = new ActionCompletedEvent
         {
             ToEntry = EntryFactory.CreateEntry(this, "aggiunto", utente)
         };
         PersistEvent toPersist = new PersistEvent
         {
             Action    = "aggiungi",
             ToPersist = utente
         };
         //scateno gli handler registrati all'evento
         ToLog?.Invoke(this, args);
         Persist?.Invoke(this, toPersist);
     }
     else
     {
         //Creazione del parametro da passare quando scateno l'evento
         ActionCompletedEvent args = new ActionCompletedEvent
         {
             ToEntry = EntryFactory.CreateEntry(this, "nonaggiunto", utente)
         };
         //scateno gli handler registrati all'evento
         ToLog?.Invoke(this, args);
     }
 }
Esempio n. 7
0
        bool IGestoreImpostazione.RemoveImpostazione(ImpostazioneTrasferimento impostazione)
        {
            bool toOut = _impostazioni.Remove(impostazione);

            if (toOut)
            {
                //Creazione dei parametri da passare agli handler dell'evento
                ActionCompletedEvent args = new ActionCompletedEvent
                {
                    ToEntry = EntryFactory.CreateEntry(this, "rimossa", impostazione.CartellaSorgente.Path,
                                                       impostazione.CartellaDestinazione)
                };
                PersistEvent toPersist = new PersistEvent
                {
                    Action    = "rimuovi",
                    ToPersist = impostazione
                };

                //Scateno l'evento
                ToLog?.Invoke(this, args);
                Persist?.Invoke(this, toPersist);
            }
            else
            {
                ActionCompletedEvent args = new ActionCompletedEvent
                {
                    ToEntry = EntryFactory.CreateEntry(this, "nonrimossa", impostazione.CartellaSorgente.Path,
                                                       impostazione.CartellaDestinazione)
                };
                ToLog?.Invoke(this, args);
            }
            return(toOut);
        }
Esempio n. 8
0
 public void OnPersist(PersistEvent @event)
 {
     if (@event.Entity is DbObject dbObject)
     {
         dbObject.Session = @event.Session;
     }
 }
Esempio n. 9
0
        public bool AddImpostazione(ImpostazioneTrasferimento impostazione)
        {
            bool toOut = _impostazioni.Add(impostazione);

            //Il log cambia a seconda dell'esito
            if (toOut)
            {
                //Creazione del parametro da passare quando scateno l'evento
                ActionCompletedEvent args = new ActionCompletedEvent
                {
                    ToEntry = EntryFactory.CreateEntry(this, "aggiunta", sorgente: impostazione.CartellaSorgente.Path,
                                                       destinazione: impostazione.CartellaDestinazione)
                };
                PersistEvent toPersist = new PersistEvent
                {
                    ToPersist = impostazione,
                    Action    = "aggiungi"
                };
                //scateno gli handler registrati all'evento
                ToLog?.Invoke(this, args);
                Persist?.Invoke(this, toPersist);
            }
            else
            {
                ActionCompletedEvent args = new ActionCompletedEvent
                {
                    ToEntry = EntryFactory.CreateEntry(this, "nonaggiunta", impostazione.CartellaSorgente.Path,
                                                       impostazione.CartellaDestinazione)
                };
                ToLog?.Invoke(this, args);
            }
            return(toOut);
        }
Esempio n. 10
0
        protected override sealed async Task PersistModelAsync(PersistEvent @event, TModel model, Graph <TModel> graph, bool create)
        {
            if (create)
            {
                string sql = GenerateSqlInsert(model, graph);

                int autoGeneratedCount = ModelInfo.IdentityAutoGeneratedProperties.Count;

                if (autoGeneratedCount == 1)
                {
                    var    modelPropertyInfo = ModelInfo.IdentityAutoGeneratedProperties[0];
                    object identity          = ExecuteSqlQueryAsync(sql);
                    if (identity == null)
                    {
                        throw new Exception(String.Format("Insert failed: {0}", String.IsNullOrWhiteSpace(@event.Name) ? defaultEventName : @event.Name));
                    }
                    identity = TypeAnalyzer.Convert(identity, modelPropertyInfo.Type);
                    modelPropertyInfo.Setter(model, identity);
                }
                else if (autoGeneratedCount > 1)
                {
                    object[] identities = (object[])(await ExecuteSqlQueryAsync(sql));
                    int      i          = 0;
                    foreach (var modelPropertyInfo in ModelInfo.IdentityAutoGeneratedProperties)
                    {
                        object identity = modelPropertyInfo.Getter(identities[i]);
                        if (identity == null)
                        {
                            throw new Exception(string.Format("Insert failed: {0}", string.IsNullOrWhiteSpace(@event.Name) ? defaultEventName : @event.Name));
                        }
                        identity = TypeAnalyzer.Convert(identity, modelPropertyInfo.Type);
                        modelPropertyInfo.Setter(model, identity);
                        i++;
                    }
                }
                else
                {
                    int rowsAffected = await ExecuteSqlAsync(sql);

                    if (rowsAffected == 0)
                    {
                        throw new Exception(String.Format("No rows affected: {0}", String.IsNullOrWhiteSpace(@event.Name) ? defaultEventName : @event.Name));
                    }
                }
            }
            else
            {
                string sql          = GenerateSqlUpdate(model, graph);
                int    rowsAffected = await ExecuteSqlAsync(sql);

                if (rowsAffected == 0)
                {
                    throw new Exception(String.Format("No rows affected: {0}", String.IsNullOrWhiteSpace(@event.Name) ? defaultEventName : @event.Name));
                }
            }
        }
Esempio n. 11
0
 protected override sealed void DeleteModel(PersistEvent @event, object[] ids)
 {
     for (int i = 0; i <= ids.Length; i += deleteBatchSize)
     {
         object[] deleteIds    = ids.Skip(i).Take(deleteBatchSize).ToArray();
         string   sql          = GenerateSqlDelete(deleteIds);
         int      rowsAffected = ExecuteSql(sql);
         if (rowsAffected == 0)
         {
             throw new Exception(String.Format("No rows affected: {0}", String.IsNullOrWhiteSpace(@event.Name) ? defaultEventName : @event.Name));
         }
     }
 }
 public virtual Task OnPersistAsync(PersistEvent @event, CancellationToken cancellationToken)
 {
     if (cancellationToken.IsCancellationRequested)
     {
         return(Task.FromCanceled <object>(cancellationToken));
     }
     try
     {
         return(OnPersistAsync(@event, IdentityMap.Instantiate(10), cancellationToken));
     }
     catch (Exception ex)
     {
         return(Task.FromException <object>(ex));
     }
 }
        public virtual async Task OnPersistAsync(PersistEvent @event, IDictionary createdAlready, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ISessionImplementor source = @event.Session;
            object obj = @event.Entity;

            object entity;

            if (obj.IsProxy())
            {
                ILazyInitializer li = ((INHibernateProxy)obj).HibernateLazyInitializer;
                if (li.IsUninitialized)
                {
                    if (li.Session == source)
                    {
                        return;                         //NOTE EARLY EXIT!
                    }
                    else
                    {
                        throw new PersistentObjectException("uninitialized proxy passed to persist()");
                    }
                }
                entity = await(li.GetImplementationAsync(cancellationToken)).ConfigureAwait(false);
            }
            else
            {
                entity = obj;
            }

            EntityState entityState = await(GetEntityStateAsync(entity, @event.EntityName, source.PersistenceContext.GetEntry(entity), source, cancellationToken)).ConfigureAwait(false);

            switch (entityState)
            {
            case EntityState.Persistent:
                await(EntityIsPersistentAsync(@event, createdAlready, cancellationToken)).ConfigureAwait(false);
                break;

            case EntityState.Transient:
                await(EntityIsTransientAsync(@event, createdAlready, cancellationToken)).ConfigureAwait(false);
                break;

            case EntityState.Detached:
                throw new PersistentObjectException("detached entity passed to persist: " + GetLoggableName(@event.EntityName, entity));

            default:
                throw new ObjectDeletedException("deleted instance passed to merge", null, GetLoggableName(@event.EntityName, entity));
            }
        }
        /// <summary> Handle the given create event. </summary>
        /// <param name="event">The save event to be handled. </param>
        /// <param name="createCache"></param>
        protected virtual void EntityIsTransient(PersistEvent @event, IDictionary createCache)
        {
            log.Debug("saving transient instance");

            IEventSource source = @event.Session;
            object       entity = source.PersistenceContext.Unproxy(@event.Entity);

            object tempObject;

            tempObject          = createCache[entity];
            createCache[entity] = entity;
            if (tempObject == null)
            {
                SaveWithGeneratedId(entity, @event.EntityName, createCache, source, false);
            }
        }
        public virtual void OnPersist(PersistEvent @event, IDictionary createdAlready)
        {
            ISessionImplementor source = @event.Session;
            object obj = @event.Entity;

            object entity;

            if (obj is INHibernateProxy)
            {
                ILazyInitializer li = ((INHibernateProxy)obj).HibernateLazyInitializer;
                if (li.IsUninitialized)
                {
                    if (li.Session == source)
                    {
                        return;                         //NOTE EARLY EXIT!
                    }
                    else
                    {
                        throw new PersistentObjectException("uninitialized proxy passed to persist()");
                    }
                }
                entity = li.GetImplementation();
            }
            else
            {
                entity = obj;
            }

            EntityState entityState = GetEntityState(entity, @event.EntityName, source.PersistenceContext.GetEntry(entity), source);

            switch (entityState)
            {
            case EntityState.Persistent:
                EntityIsPersistent(@event, createdAlready);
                break;

            case EntityState.Transient:
                EntityIsTransient(@event, createdAlready);
                break;

            case EntityState.Detached:
                throw new PersistentObjectException("detached entity passed to persist: " + GetLoggableName(@event.EntityName, entity));

            default:
                throw new ObjectDeletedException("deleted instance passed to merge", null, GetLoggableName(@event.EntityName, entity));
            }
        }
        //..
		public virtual void OnPersist(PersistEvent @event, IDictionary createdAlready)
		{
            //... 
			EntityState entityState = GetEntityState(entity, @event.EntityName, source.PersistenceContext.GetEntry(entity), source);
			switch (entityState)
			{
				case EntityState.Persistent:
					EntityIsPersistent(@event, createdAlready);
					break;
				case EntityState.Transient:
					EntityIsTransient(@event, createdAlready);
					break;
				case EntityState.Detached:
					throw new PersistentObjectException("detached entity passed to persist: " + GetLoggableName(@event.EntityName, entity));
				default:
					throw new ObjectDeletedException("deleted instance passed to merge", null, GetLoggableName(@event.EntityName, entity));
			}
    }
Esempio n. 17
0
		protected virtual void EntityIsPersistent(PersistEvent @event, IDictionary createCache)
		{
			log.Debug("ignoring persistent instance");
			IEventSource source = @event.Session;

			//TODO: check that entry.getIdentifier().equals(requestedId)
			object entity = source.PersistenceContext.Unproxy(@event.Entity);
			IEntityPersister persister = source.GetEntityPersister(entity);

			object tempObject;
			tempObject = createCache[entity];
			createCache[entity] = entity;
			if (tempObject == null)
			{
				//TODO: merge into one method!
				CascadeBeforeSave(source, persister, entity, createCache);
				CascadeAfterSave(source, persister, entity, createCache);
			}
		}
Esempio n. 18
0
		public virtual void OnPersist(PersistEvent @event, IDictionary createdAlready)
		{
			ISessionImplementor source = @event.Session;
			object obj = @event.Entity;

			object entity;
			if (obj is INHibernateProxy)
			{
				ILazyInitializer li = ((INHibernateProxy)obj).HibernateLazyInitializer;
				if (li.IsUninitialized)
				{
					if (li.Session == source)
					{
						return; //NOTE EARLY EXIT!
					}
					else
					{
						throw new PersistentObjectException("uninitialized proxy passed to persist()");
					}
				}
				entity = li.GetImplementation();
			}
			else
			{
				entity = obj;
			}

			EntityState entityState = GetEntityState(entity, @event.EntityName, source.PersistenceContext.GetEntry(entity), source);

			switch (entityState)
			{
				case EntityState.Persistent:
					EntityIsPersistent(@event, createdAlready);
					break;
				case EntityState.Transient:
					EntityIsTransient(@event, createdAlready);
					break;
				case EntityState.Detached:
					throw new PersistentObjectException("detached entity passed to persist: " + GetLoggableName(@event.EntityName, entity));
				default:
					throw new ObjectDeletedException("deleted instance passed to merge", null, GetLoggableName(@event.EntityName, entity));
			}
		}
        protected virtual void EntityIsPersistent(PersistEvent @event, IDictionary createCache)
        {
            log.Debug("ignoring persistent instance");
            IEventSource source = @event.Session;

            //TODO: check that entry.getIdentifier().equals(requestedId)
            object           entity    = source.PersistenceContext.Unproxy(@event.Entity);
            IEntityPersister persister = source.GetEntityPersister(@event.EntityName, entity);

            object tempObject;

            tempObject          = createCache[entity];
            createCache[entity] = entity;
            if (tempObject == null)
            {
                //TODO: merge into one method!
                CascadeBeforeSave(source, persister, entity, createCache);
                CascadeAfterSave(source, persister, entity, createCache);
            }
        }
Esempio n. 20
0
 public void OnPersist(PersistEvent @event, System.Collections.IDictionary createdAlready)
 {
     log.Debug("OnPersist :" + @event);
 }
Esempio n. 21
0
 public void OnPersist(PersistEvent @event)
 {
     @event.EntityName = GetEntityName(@event.Entity, @event.EntityName);
 }
Esempio n. 22
0
		public virtual void OnPersist(PersistEvent @event)
		{
			OnPersist(@event, IdentityMap.Instantiate(10));
		}
Esempio n. 23
0
		/// <summary> Handle the given create event. </summary>
		/// <param name="event">The save event to be handled. </param>
		/// <param name="createCache"></param>
		protected virtual void EntityIsTransient(PersistEvent @event, IDictionary createCache)
		{
			log.Debug("saving transient instance");

			IEventSource source = @event.Session;
			object entity = source.PersistenceContext.Unproxy(@event.Entity);

			object tempObject;
			tempObject = createCache[entity];
			createCache[entity] = entity;
			if (tempObject == null)
			{
				SaveWithGeneratedId(entity, @event.EntityName, createCache, source, false);
			}
		}
Esempio n. 24
0
 public void OnPersist(PersistEvent @event, IDictionary createdAlready)
 {
     @event.EntityName = GetEntityName(@event.Entity, @event.EntityName);
 }
 public virtual void OnPersist(PersistEvent @event)
 {
     OnPersist(@event, IdentityMap.Instantiate(10));
 }
Esempio n. 26
0
 public Task OnPersistAsync(PersistEvent @event, IDictionary createdAlready, CancellationToken cancellationToken)
 {
     OnPersist(@event, createdAlready);
     return(Task.CompletedTask);
 }
Esempio n. 27
0
 public Task OnPersistAsync(PersistEvent @event, CancellationToken cancellationToken)
 {
     OnPersist(@event);
     return(Task.CompletedTask);
 }
 public void OnPersist(PersistEvent @event, IDictionary createdAlready)
 {
     ResetReadOnlyEntity(@event.Session, @event.Entity);
 }
 public void OnPersist(PersistEvent @event)
 {
     OnPersist(@event, null);
 }
Esempio n. 30
0
 public void OnPersist(PersistEvent @event)
 {
     log.Debug("OnPersist :" + @event);
 }