Esempio n. 1
0
        public virtual void UpdateIdentityMap(InternalEntityEntry entry, IKeyValue oldKeyValue, IKey principalKey)
        {
            if (entry.EntityState == EntityState.Detached)
            {
                return;
            }

            var newKey = GetKeyValueChecked(principalKey, entry);

            if (oldKeyValue.Equals(newKey))
            {
                return;
            }

            InternalEntityEntry existingEntry;

            if (_identityMap.TryGetValue(newKey, out existingEntry) &&
                existingEntry != entry)
            {
                throw new InvalidOperationException(CoreStrings.IdentityConflict(entry.EntityType.Name));
            }

            _identityMap.Remove(oldKeyValue);

            if (newKey != KeyValue.InvalidKeyValue)
            {
                _identityMap[newKey] = entry;
            }
        }
Esempio n. 2
0
        public virtual void UpdateDependentMap(InternalEntityEntry entry, IKeyValue oldKeyValue, IForeignKey foreignKey)
        {
            if (entry.EntityState == EntityState.Detached)
            {
                return;
            }

            var newKey = entry.GetDependentKeyValue(foreignKey);

            if (oldKeyValue.Equals(newKey))
            {
                return;
            }

            Dictionary <IKeyValue, HashSet <InternalEntityEntry> > fkMap;

            if (_dependentsMap.TryGetValue(foreignKey, out fkMap))
            {
                HashSet <InternalEntityEntry> dependents;

                if (oldKeyValue != KeyValue.InvalidKeyValue &&
                    fkMap.TryGetValue(oldKeyValue, out dependents))
                {
                    dependents.Remove(entry);

                    if (dependents.Count == 0)
                    {
                        fkMap.Remove(oldKeyValue);
                    }
                }

                if (newKey == KeyValue.InvalidKeyValue)
                {
                    if (fkMap.Count == 0)
                    {
                        _dependentsMap.Remove(foreignKey);
                    }
                }
                else
                {
                    if (!fkMap.TryGetValue(newKey, out dependents))
                    {
                        dependents    = new HashSet <InternalEntityEntry>();
                        fkMap[newKey] = dependents;
                    }

                    dependents.Add(entry);
                }
            }
        }
Esempio n. 3
0
        public virtual void UpdateDependentMap(InternalEntityEntry entry, IKeyValue oldKeyValue, IForeignKey foreignKey)
        {
            if (entry.EntityState == EntityState.Detached)
            {
                return;
            }

            var newKey = entry.GetDependentKeyValue(foreignKey);

            if (oldKeyValue.Equals(newKey))
            {
                return;
            }

            Dictionary<IKeyValue, HashSet<InternalEntityEntry>> fkMap;
            if (_dependentsMap.TryGetValue(foreignKey, out fkMap))
            {
                HashSet<InternalEntityEntry> dependents;

                if (oldKeyValue != KeyValue.InvalidKeyValue
                    && fkMap.TryGetValue(oldKeyValue, out dependents))
                {
                    dependents.Remove(entry);

                    if (dependents.Count == 0)
                    {
                        fkMap.Remove(oldKeyValue);
                    }
                }

                if (newKey == KeyValue.InvalidKeyValue)
                {
                    if (fkMap.Count == 0)
                    {
                        _dependentsMap.Remove(foreignKey);
                    }
                }
                else
                {
                    if (!fkMap.TryGetValue(newKey, out dependents))
                    {
                        dependents = new HashSet<InternalEntityEntry>();
                        fkMap[newKey] = dependents;
                    }

                    dependents.Add(entry);
                }
            }
        }
Esempio n. 4
0
        public virtual void UpdateIdentityMap(InternalEntityEntry entry, IKeyValue oldKeyValue, IKey principalKey)
        {
            if (entry.EntityState == EntityState.Detached)
            {
                return;
            }

            var newKey = GetKeyValueChecked(principalKey, entry);

            if (oldKeyValue.Equals(newKey))
            {
                return;
            }

            InternalEntityEntry existingEntry;
            if (_identityMap.TryGetValue(newKey, out existingEntry)
                && existingEntry != entry)
            {
                throw new InvalidOperationException(CoreStrings.IdentityConflict(entry.EntityType.Name));
            }

            _identityMap.Remove(oldKeyValue);

            if (newKey != KeyValue.InvalidKeyValue)
            {
                _identityMap[newKey] = entry;
            }
        }