internal void Reset() { DetachCacheFromEntity(); _cache = null; _entity = null; _entryState = EntityRowState.Detached; }
public void AcceptChanges() { ValidateState(); switch (this.State) { case EntityRowState.Unchanged: case (EntityRowState.Unchanged | EntityRowState.Detached): return; case EntityRowState.Added: _cache.ChangeState(this, EntityRowState.Added, EntityRowState.Unchanged); (_entity as ExtensibleEntity).AcceptChanges(); this.State = EntityRowState.Unchanged; return; case EntityRowState.Deleted: //TODO: accepts changes for relationships _cache.ChangeState(this, EntityRowState.Deleted, EntityRowState.Detached); this.Reset(); return; case EntityRowState.Modified: _cache.ChangeState(this, EntityRowState.Modified, EntityRowState.Unchanged); (_entity as ExtensibleEntity).AcceptChanges(); this.State = EntityRowState.Unchanged; return; } }
/// <summary> /// Get the EntityCacheEntry list by the EntityRowState flags /// </summary> /// <param name="state"></param> /// <returns></returns> public IEnumerable <EntityCacheEntry> GetCacheEntries(EntityRowState state) { List <EntityCacheEntry> entryList = new List <EntityCacheEntry>(); if ((EntityRowState.Detached & state) != (EntityRowState)0) { throw new ArgumentException("Detached cache entries does not exist in cache"); } if ((EntityRowState.Added & state) != ((EntityRowState)0)) { entryList.AddRange(_addedEntityStore.Values); } if ((EntityRowState.Modified & state) != ((EntityRowState)0)) { entryList.AddRange(_modifiedEntityStore.Values); } if ((EntityRowState.Deleted & state) != ((EntityRowState)0)) { entryList.AddRange(_deletedEntityStore.Values); } if ((EntityRowState.Unchanged & state) != ((EntityRowState)0)) { entryList.AddRange(_unchangedEntityStore.Values); } return(entryList); }
private void AddCacheEntryToDictionary(EntityCacheEntry entry, EntityRowState state) { switch (state) { case EntityRowState.Unchanged: _unchangedEntityStore[entry.Entity.Key] = entry; return; case (EntityRowState.Unchanged | EntityRowState.Detached): return; case EntityRowState.Added: _addedEntityStore[entry.Entity.Key] = entry; return; case EntityRowState.Deleted: _deletedEntityStore[entry.Entity.Key] = entry; return; case EntityRowState.Modified: _modifiedEntityStore[entry.Entity.Key] = entry; return; default: return; } }
internal void ChangeEntityValue(string memberName, object value) { EntityRowState oldState = _entryState; if (_entryState != EntityRowState.Added) { _entryState = EntityRowState.Modified; } if (oldState != _entryState) { _cache.ChangeState(this, oldState, _entryState); } }
internal void ChangeState(EntityCacheEntry entry, EntityRowState oldState, EntityRowState newState) { if (newState == EntityRowState.Detached) { RemoveCacheEntryFromDictionary(entry, oldState); entry.Reset(); } else { RemoveCacheEntryFromDictionary(entry, oldState); AddCacheEntryToDictionary(entry, newState); } }
internal void Delete(bool doFixup) { switch (State) { case EntityRowState.Unchanged: { if (State != EntityRowState.Deleted) { _cache.ChangeState(this, EntityRowState.Unchanged, EntityRowState.Deleted); _entryState = EntityRowState.Deleted; } } break; case (EntityRowState.Unchanged | EntityRowState.Detached): return; case EntityRowState.Added: { if (State != EntityRowState.Detached) { _cache.ChangeState(this, EntityRowState.Added, EntityRowState.Detached); _entryState = EntityRowState.Detached; Reset(); } } return; case EntityRowState.Modified: { if (this.State != EntityRowState.Deleted) { _cache.ChangeState(this, EntityRowState.Added, EntityRowState.Detached); _entryState = EntityRowState.Deleted; } } return; } }
private void RemoveCacheEntryFromDictionary(EntityCacheEntry entry, EntityRowState state) { switch (state) { case EntityRowState.Unchanged: _unchangedEntityStore.Remove(entry.Entity.Key); return; case (EntityRowState.Unchanged | EntityRowState.Detached): return; case EntityRowState.Added: _addedEntityStore.Remove(entry.Entity.Key); return; case EntityRowState.Deleted: _deletedEntityStore.Remove(entry.Entity.Key); return; case EntityRowState.Modified: _modifiedEntityStore.Remove(entry.Entity.Key); return; } }
public EntityCacheEntry(IExtensibleEntity entity, ExtensibleObjectCache cache, bool newInstance) { _entryState = newInstance ? EntityRowState.Added : EntityRowState.Unchanged; _entity = entity; _cache = cache; }
public void RejectChanges() { this.State = EntityRowState.Unchanged; (_entity as ExtensibleEntity).RejectChanges(); }