예제 #1
0
        private IReadOnlyList <ColumnModification> GenerateColumnModifications()
        {
            var adding              = EntityState == EntityState.Added;
            var deleting            = EntityState == EntityState.Deleted;
            var modifying           = EntityState == EntityState.Modified;
            var columnModifications = new List <ColumnModification>();

            foreach (var stateEntry in _stateEntries)
            {
                var entityType = stateEntry.EntityType;

                foreach (var property in entityType.Properties)
                {
                    var isKey = property.IsPrimaryKey();

                    var isCondition = !adding && (isKey || property.IsConcurrencyToken);

                    var readValue = (!deleting && property.ValueGenerationOnSave == ValueGenerationOnSave.WhenInsertingAndUpdating) ||
                                    (adding && property.ValueGenerationOnSave == ValueGenerationOnSave.WhenInserting);

                    // TODO: Default values
                    var writeValue = (adding && property.ValueGenerationOnSave == ValueGenerationOnSave.None) ||
                                     (modifying && stateEntry.IsPropertyModified(property) &&
                                      property.ValueGenerationOnSave != ValueGenerationOnSave.WhenInsertingAndUpdating);

                    if (readValue ||
                        writeValue ||
                        isCondition)
                    {
                        if (readValue)
                        {
                            _requiresResultPropagation = true;
                        }

                        columnModifications.Add(new ColumnModification(
                                                    stateEntry,
                                                    property,
                                                    writeValue ? _parameterNameGenerator.GenerateNext() : null,
                                                    isCondition ? _parameterNameGenerator.GenerateNext() : null,
                                                    readValue,
                                                    writeValue,
                                                    isKey,
                                                    isCondition));
                    }
                }
            }

            return(columnModifications);
        }
        private IReadOnlyList <ColumnModification> GenerateColumnModifications()
        {
            var adding              = EntityState == EntityState.Added;
            var deleting            = EntityState == EntityState.Deleted;
            var columnModifications = new List <ColumnModification>();

            foreach (var stateEntry in _stateEntries)
            {
                var entityType = stateEntry.EntityType;

                foreach (var property in entityType.Properties)
                {
                    // TODO: Concurrency columns
                    var isKey       = entityType.GetKey().Properties.Contains(property);
                    var isCondition = isKey || (!adding && property.IsConcurrencyToken);

                    var readValue = !deleting && (property.ValueGenerationStrategy == ValueGenerationStrategy.StoreComputed ||
                                                  (adding && property.ValueGenerationStrategy == ValueGenerationStrategy.StoreIdentity));

                    // TODO: Default values
                    // TODO: Should not need to filter key values here but they currently can get marked as modified
                    var writeValue = (adding && property.ValueGenerationStrategy != ValueGenerationStrategy.StoreComputed &&
                                      property.ValueGenerationStrategy != ValueGenerationStrategy.StoreIdentity) ||
                                     (!isKey && !deleting && stateEntry.IsPropertyModified(property));

                    if (readValue ||
                        writeValue ||
                        isKey ||
                        isCondition)
                    {
                        if (readValue)
                        {
                            _requiresResultPropagation = true;
                        }

                        columnModifications.Add(new ColumnModification(
                                                    stateEntry, property, _parameterNameGenerator.GenerateNext(), readValue, writeValue, isKey, isCondition));
                    }
                }
            }
            return(columnModifications);
        }