コード例 #1
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public virtual InternalEntityEntry PrepareToSave()
        {
            if (EntityState == EntityState.Added)
            {
                foreach (var property in EntityType.GetProperties())
                {
                    if (property.IsReadOnlyBeforeSave &&
                        !HasTemporaryValue(property) &&
                        !HasDefaultValue(property))
                    {
                        throw new InvalidOperationException(CoreStrings.PropertyReadOnlyBeforeSave(property.Name, EntityType.DisplayName()));
                    }
                }
            }
            else if (EntityState == EntityState.Modified)
            {
                foreach (var property in EntityType.GetProperties())
                {
                    if (property.IsReadOnlyAfterSave &&
                        IsModified(property))
                    {
                        throw new InvalidOperationException(CoreStrings.PropertyReadOnlyAfterSave(property.Name, EntityType.DisplayName()));
                    }
                }
            }

            if (EntityType.StoreGeneratedCount() > 0)
            {
                DiscardStoreGeneratedValues();
                _storeGeneratedValues = new StoreGeneratedValues(this);
            }

            return(this);
        }
コード例 #2
0
        public virtual InternalEntityEntry PrepareToSave()
        {
            if (EntityState == EntityState.Added)
            {
                var setProperty = EntityType.GetProperties().FirstOrDefault(p => p.IsReadOnlyBeforeSave && !IsTemporaryOrDefault(p));
                if (setProperty != null)
                {
                    throw new InvalidOperationException(CoreStrings.PropertyReadOnlyBeforeSave(setProperty.Name, EntityType.DisplayName()));
                }
            }
            else if (EntityState == EntityState.Modified)
            {
                var modifiedProperty = EntityType.GetProperties().FirstOrDefault(p => p.IsReadOnlyAfterSave && IsModified(p));
                if (modifiedProperty != null)
                {
                    throw new InvalidOperationException(CoreStrings.PropertyReadOnlyAfterSave(modifiedProperty.Name, EntityType.DisplayName()));
                }
            }

            if (EntityType.StoreGeneratedCount() > 0)
            {
                _storeGeneratedValues = new StoreGeneratedValues(this);
            }

            return(this);
        }
コード例 #3
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public virtual void DiscardStoreGeneratedValues()
        {
            if (!_storeGeneratedValues.IsEmpty)
            {
                var storeGeneratedValues = _storeGeneratedValues;
                _storeGeneratedValues = new StoreGeneratedValues();

                foreach (var property in EntityType.GetProperties())
                {
                    object value;
                    if (storeGeneratedValues.TryGetValue(property, out value))
                    {
                        StateManager.Notify.PropertyChanged(this, property, setModified: false);
                    }
                }
            }
        }
コード例 #4
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public virtual void DiscardStoreGeneratedValues()
        {
            if (!_storeGeneratedValues.IsEmpty)
            {
                var storeGeneratedValues = _storeGeneratedValues;
                _storeGeneratedValues = new StoreGeneratedValues();

                foreach (var property in EntityType.GetProperties())
                {
                    if (storeGeneratedValues.TryGetValue(property, out var value))
                    {
                        var isTemp = HasTemporaryValue(property);

                        StateManager.InternalEntityEntryNotifier.PropertyChanged(this, property, setModified: false);

                        if (isTemp)
                        {
                            MarkAsTemporary(property);
                        }
                    }
                }
            }
        }
コード例 #5
0
        /// <summary>
        ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///     directly from your code. This API may change or be removed in future releases.
        /// </summary>
        public virtual void AcceptChanges()
        {
            if (!_storeGeneratedValues.IsEmpty)
            {
                var storeGeneratedValues = _storeGeneratedValues;
                _storeGeneratedValues = new StoreGeneratedValues();

                foreach (var property in EntityType.GetProperties())
                {
                    object value;
                    if (storeGeneratedValues.TryGetValue(property, out value))
                    {
                        this[property] = value;
                    }
                }
            }

            var currentState = EntityState;

            if ((currentState == EntityState.Unchanged) ||
                (currentState == EntityState.Detached))
            {
                return;
            }

            if ((currentState == EntityState.Added) ||
                (currentState == EntityState.Modified))
            {
                _originalValues.AcceptChanges(this);

                SetEntityState(EntityState.Unchanged, true);
            }
            else if (currentState == EntityState.Deleted)
            {
                SetEntityState(EntityState.Detached);
            }
        }
コード例 #6
0
 public virtual void DiscardStoreGeneratedValues() => _storeGeneratedValues = new StoreGeneratedValues();