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); } }
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)); } }
public void OnPersist(PersistEvent @event, IDictionary createdAlready) { if (@event.Entity is DbObject dbObject) { dbObject.Session = @event.Session; } }
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); } }
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); }
public void OnPersist(PersistEvent @event) { if (@event.Entity is DbObject dbObject) { dbObject.Session = @event.Session; } }
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); }
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)); } } }
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)); } }
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); } }
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); } }
public void OnPersist(PersistEvent @event, System.Collections.IDictionary createdAlready) { log.Debug("OnPersist :" + @event); }
public void OnPersist(PersistEvent @event) { @event.EntityName = GetEntityName(@event.Entity, @event.EntityName); }
public virtual void OnPersist(PersistEvent @event) { OnPersist(@event, IdentityMap.Instantiate(10)); }
public void OnPersist(PersistEvent @event, IDictionary createdAlready) { @event.EntityName = GetEntityName(@event.Entity, @event.EntityName); }
public Task OnPersistAsync(PersistEvent @event, IDictionary createdAlready, CancellationToken cancellationToken) { OnPersist(@event, createdAlready); return(Task.CompletedTask); }
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); }
public void OnPersist(PersistEvent @event) { log.Debug("OnPersist :" + @event); }