private async ValueTask RemapEntityKeys(KeyMapping keyMapping, bool isAsync, CancellationToken token = default) { if (keyMapping.Map.Count == 0) { return; } using (Activate()) { if (!LazyKeyGenerationIsEnabled) { await Persist(PersistReason.RemapEntityKeys, isAsync, token).ConfigureAwait(false); Invalidate(); } if (IsDebugEventLoggingEnabled) { OrmLog.Debug(Strings.LogSessionXRemappingEntityKeys, this); } foreach (var entityState in EntityChangeRegistry.GetItems(PersistenceState.New)) { var key = entityState.Key; var remappedKey = keyMapping.TryRemapKey(key); if (remappedKey != key) { entityState.RemapKey(remappedKey); } EntityStateCache.Add(entityState); } ProcessChangesOfEntitySets(entitySetState => entitySetState.RemapKeys(keyMapping)); EntityEvents.RemapKeys(keyMapping); } }
internal void RemapEntityKeys(KeyMapping keyMapping) { if (keyMapping.Map.Count == 0) { return; } using (Activate()) { if (!LazyKeyGenerationIsEnabled) { Persist(PersistReason.RemapEntityKeys); Invalidate(); } OrmLog.Debug(Strings.LogSessionXRemappingEntityKeys, this); foreach (var entityState in EntityChangeRegistry.GetItems(PersistenceState.New)) { var key = entityState.Key; var remappedKey = keyMapping.TryRemapKey(key); if (remappedKey != key) { entityState.RemapKey(remappedKey); } EntityStateCache.Add(entityState); } ProcessChangesOfEntitySets(entitySetState => entitySetState.RemapKeys(keyMapping)); EntityEvents.RemapKeys(keyMapping); } }
internal void RemoveOrCreateRemovedEntity(Type type, Key key, EntityRemoveReason reason) { // Checking for deleted entity with the same key var result = EntityStateCache[key, false]; if (result != null) { if (result.PersistenceState == PersistenceState.Removed) { return; } result.Entity.RemoveLaterInternal(reason); return; } EnforceChangeRegistrySizeLimit(); // Must be done before new entity registration result = new EntityState(this, key, null) { PersistenceState = PersistenceState.Removed }; EntityStateCache.Add(result); if (IsDebugEventLoggingEnabled) { OrmLog.Debug(Strings.LogSessionXCachingY, this, result); } }
private EntityState AddEntityStateToCache(Key key, Tuple tuple, bool isStale) { var result = new EntityState(this, key, tuple, isStale) { PersistenceState = PersistenceState.Synchronized }; EntityStateCache.Add(result); OrmLog.Debug(Strings.LogSessionXCachingY, this, result); return(result); }
internal EntityState CreateEntityState(Key key, bool failIfStateIsAlreadyBound) { // Checking for deleted entity with the same key var result = EntityStateCache[key, false]; EnforceChangeRegistrySizeLimit(); // Must be done before new entity registration // If type is unknown, we consider tuple is null, // so its Entity is considered as non-existing Tuple tuple = null; if (key.HasExactType) { // A tuple with all the fields set to default values rather then N/A var typeInfo = key.TypeInfo; tuple = typeInfo.CreateEntityTuple(key.Value, StorageNode.TypeIdRegistry[typeInfo]); } if (result == null) { result = new EntityState(this, key, tuple) { PersistenceState = PersistenceState.New }; EntityStateCache.Add(result); } else { if (result.Entity != null && !result.Entity.IsRemoved && failIfStateIsAlreadyBound) { throw new UniqueConstraintViolationException(string.Format(Strings.ExEntityWithKeyXAlreadyExists, key)); } result.Key = key; result.Tuple = tuple; result.PersistenceState = PersistenceState.New; } if (IsDebugEventLoggingEnabled) { OrmLog.Debug(Strings.LogSessionXCachingY, this, result); } return(result); }