public void Cannot_remove_mapping_fragment_when_read_only() { var setMapping = new EntitySetMapping( new EntitySet(), new EntityContainerMapping(new EntityContainer("C", DataSpace.CSpace))); var typeMapping = new EntityTypeMapping(setMapping); var mappingFragment = new MappingFragment(new EntitySet(), typeMapping, false); typeMapping.AddFragment(mappingFragment); typeMapping.SetReadOnly(); Assert.Equal( Strings.OperationOnReadOnlyItem, Assert.Throws <InvalidOperationException>( () => typeMapping.RemoveFragment(mappingFragment)).Message); }
public void Can_add_remove_mapping_fragment() { var storageSetMapping = new EntitySetMapping( new EntitySet(), new EntityContainerMapping(new EntityContainer("C", DataSpace.CSpace))); var storageTypeMapping = new EntityTypeMapping(storageSetMapping); Assert.Empty(storageTypeMapping.MappingFragments); var mappingFragment = new MappingFragment(new EntitySet(), storageTypeMapping, false); storageTypeMapping.AddFragment(mappingFragment); Assert.Same(mappingFragment, storageTypeMapping.MappingFragments.Single()); storageTypeMapping.RemoveFragment(mappingFragment); Assert.Empty(storageTypeMapping.MappingFragments); }
public void Cannot_remove_mapping_fragment_when_read_only() { var setMapping = new EntitySetMapping( new EntitySet(), new EntityContainerMapping(new EntityContainer("C", DataSpace.CSpace))); var typeMapping = new EntityTypeMapping(setMapping); var mappingFragment = new MappingFragment(new EntitySet(), typeMapping, false); typeMapping.AddFragment(mappingFragment); typeMapping.SetReadOnly(); Assert.Equal( Strings.OperationOnReadOnlyItem, Assert.Throws<InvalidOperationException>( () => typeMapping.RemoveFragment(mappingFragment)).Message); }
private void RemoveFragment( EntitySet entitySet, EntityTypeMapping entityTypeMapping, MappingFragment fragment) { // Make the default discriminator nullable if this type isn't using it but there is a base type var defaultDiscriminator = fragment.GetDefaultDiscriminator(); if (defaultDiscriminator != null && entityTypeMapping.EntityType.BaseType != null && !entityTypeMapping.EntityType.Abstract) { var columnMapping = _tableMappings[fragment.Table].ColumnMappings.SingleOrDefault( cm => cm.Column == defaultDiscriminator); if (columnMapping != null) { var propertyMapping = columnMapping.PropertyMappings.SingleOrDefault( pm => pm.EntityType == entityTypeMapping.EntityType); if (propertyMapping != null) { columnMapping.PropertyMappings.Remove(propertyMapping); } } defaultDiscriminator.Nullable = true; } // The default TPH mapping may result in columns being created that are no longer required // when an abstract type mapping to the table is removed, for example in TPC cases. We need // to remove these columns. if (entityTypeMapping.EntityType.Abstract) { foreach (var columnMapping in _tableMappings[fragment.Table].ColumnMappings.Where( cm => cm.PropertyMappings.All(pm => pm.EntityType == entityTypeMapping.EntityType))) { fragment.Table.RemoveMember(columnMapping.Column); } } entityTypeMapping.RemoveFragment(fragment); if (!entityTypeMapping.MappingFragments.Any()) { _databaseMapping.GetEntitySetMapping(entitySet).RemoveTypeMapping(entityTypeMapping); } }