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); }