Esempio n. 1
0
 internal void Reset()
 {
     DetachCacheFromEntity();
     _cache      = null;
     _entity     = null;
     _entryState = EntityRowState.Detached;
 }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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;
            }
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
 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);
     }
 }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
 public EntityCacheEntry(IExtensibleEntity entity, ExtensibleObjectCache cache, bool newInstance)
 {
     _entryState = newInstance ? EntityRowState.Added : EntityRowState.Unchanged;
     _entity     = entity;
     _cache      = cache;
 }
Esempio n. 10
0
 public void RejectChanges()
 {
     this.State = EntityRowState.Unchanged;
     (_entity as ExtensibleEntity).RejectChanges();
 }