public void Can_add_and_remove_column_conditions() { var mappingFragment = new MappingFragment( new EntitySet(), new EntityTypeMapping( new EntitySetMapping( new EntitySet(), new EntityContainerMapping(new EntityContainer("C", DataSpace.CSpace)))), false); Assert.Empty(mappingFragment.ColumnConditions); var conditionPropertyMapping = new ValueConditionMapping(new EdmProperty("C", TypeUsage.Create(new PrimitiveType { DataSpace = DataSpace.SSpace })), 42); mappingFragment.AddConditionProperty(conditionPropertyMapping); Assert.Same(conditionPropertyMapping, mappingFragment.ColumnConditions.Single()); mappingFragment.RemoveConditionProperty(conditionPropertyMapping); Assert.Empty(mappingFragment.ColumnConditions); }
public void Can_add_and_remove_column_conditions() { var mappingFragment = new MappingFragment( new EntitySet(), new EntityTypeMapping( new EntitySetMapping( new EntitySet(), new EntityContainerMapping(new EntityContainer("C", DataSpace.CSpace)))), false); Assert.Empty(mappingFragment.ColumnConditions); var conditionPropertyMapping = new ConditionPropertyMapping(null, new EdmProperty("C", TypeUsage.Create(new PrimitiveType() { DataSpace = DataSpace.SSpace })), 42, null); mappingFragment.AddConditionProperty(conditionPropertyMapping); Assert.Same(conditionPropertyMapping, mappingFragment.ColumnConditions.Single()); mappingFragment.RemoveConditionProperty(conditionPropertyMapping); Assert.Empty(mappingFragment.ColumnConditions); }
// <summary> // Makes sure only the required property mappings are present // </summary> private static void ConfigureTypeMappings( TableMapping tableMapping, Dictionary<EntityType, EntityTypeMapping> rootMappings, EntityType entityType, MappingFragment propertiesTypeMappingFragment, MappingFragment conditionTypeMappingFragment) { var existingPropertyMappings = new List<ColumnMappingBuilder>( propertiesTypeMappingFragment.ColumnMappings.Where(pm => !pm.ColumnProperty.IsPrimaryKeyColumn)); var existingConditions = new List<ConditionPropertyMapping>(propertiesTypeMappingFragment.ColumnConditions); foreach (var columnMapping in from cm in tableMapping.ColumnMappings from pm in cm.PropertyMappings where pm.EntityType == entityType select new { cm.Column, Property = pm }) { if (columnMapping.Property.PropertyPath != null && !IsRootTypeMapping( rootMappings, columnMapping.Property.EntityType, columnMapping.Property.PropertyPath)) { var existingPropertyMapping = propertiesTypeMappingFragment.ColumnMappings.SingleOrDefault( x => x.PropertyPath == columnMapping.Property.PropertyPath); if (existingPropertyMapping != null) { existingPropertyMappings.Remove(existingPropertyMapping); } else { existingPropertyMapping = new ColumnMappingBuilder(columnMapping.Column, columnMapping.Property.PropertyPath); propertiesTypeMappingFragment.AddColumnMapping(existingPropertyMapping); } } if (columnMapping.Property.Conditions != null) { foreach (var condition in columnMapping.Property.Conditions) { if (conditionTypeMappingFragment.ColumnConditions.Contains(condition)) { existingConditions.Remove(condition); } else if (!entityType.Abstract) { conditionTypeMappingFragment.AddConditionProperty(condition); } } } } // Any leftover mappings are removed foreach (var leftoverPropertyMapping in existingPropertyMappings) { propertiesTypeMappingFragment.RemoveColumnMapping(leftoverPropertyMapping); } foreach (var leftoverCondition in existingConditions) { conditionTypeMappingFragment.RemoveConditionProperty(leftoverCondition); } if (entityType.Abstract) { propertiesTypeMappingFragment.ClearConditions(); } }