public void Configure_should_rename_columns_when_right_keys_configured() { var database = new EdmModel(DataSpace.CSpace); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), new EntitySet()) .Initialize(); var column = new EdmProperty("C"); associationSetMapping.TargetEndMapping.AddProperty(new StorageScalarPropertyMapping(new EdmProperty("PK"), column)); var manyToManyAssociationMappingConfiguration = new ManyToManyAssociationMappingConfiguration(); manyToManyAssociationMappingConfiguration.MapRightKey("NewName"); var mockPropertyInfo = new MockPropertyInfo(); associationSetMapping.SourceEndMapping.EndMember = new AssociationEndMember("S", new EntityType("E", "N", DataSpace.CSpace)); associationSetMapping.SourceEndMapping.EndMember.SetClrPropertyInfo(mockPropertyInfo); manyToManyAssociationMappingConfiguration.Configure(associationSetMapping, database, mockPropertyInfo); Assert.Equal("NewName", column.Name); }
public void Configure_should_rename_table_when_table_configured() { var database = new EdmModel(DataSpace.SSpace); var table = database.AddTable("OriginalName"); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), database.GetEntitySet(table)) .Initialize(); var manyToManyAssociationMappingConfiguration = new ManyToManyAssociationMappingConfiguration(); manyToManyAssociationMappingConfiguration.ToTable("NewName"); var mockPropertyInfo = new MockPropertyInfo(); associationSetMapping.SourceEndMapping.EndMember = new AssociationEndMember("S", new EntityType("E", "N", DataSpace.CSpace)); associationSetMapping.SourceEndMapping.EndMember.SetClrPropertyInfo(mockPropertyInfo); manyToManyAssociationMappingConfiguration.Configure(associationSetMapping, database, mockPropertyInfo); Assert.Equal("NewName", table.GetTableName().Name); Assert.Same(manyToManyAssociationMappingConfiguration, table.GetConfiguration()); }
public void Initialize_should_initialize_ends() { var associationSetMapping = new StorageAssociationSetMapping(new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), new EntitySet()).Initialize(); Assert.NotNull(associationSetMapping.SourceEndMapping); Assert.NotNull(associationSetMapping.TargetEndMapping); }
public void Can_get_and_set_configuration_annotation() { var associationSetMapping = new StorageAssociationSetMapping(new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), new EntitySet()); associationSetMapping.SetConfiguration(42); Assert.Equal(42, associationSetMapping.GetConfiguration()); }
public void Can_get_association_set() { var entitySet = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet); Assert.Same(associationSet, associationSetMapping.AssociationSet); }
public void Can_get_association_set() { var entitySet = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType()); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet); Assert.Same(associationSet, associationSetMapping.AssociationSet); }
public void Can_get_table() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("ES", null, null, null, entityType); var associationSet = new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet); Assert.Same(entityType, associationSetMapping.Table); }
public void Can_get_table() { var entityType = new EntityType(); var entitySet = new EntitySet("ES", null, null, null, entityType); var associationSet = new AssociationSet("AS", new AssociationType()); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet); Assert.Same(entityType, associationSetMapping.Table); }
public void Can_get_association_set_mappings() { var entityContainerMapping = new StorageEntityContainerMapping(new EntityContainer()); Assert.Empty(entityContainerMapping.AssociationSetMappings); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType()), entityContainerMapping); entityContainerMapping.AddAssociationSetMapping(associationSetMapping); Assert.Same(associationSetMapping, entityContainerMapping.AssociationSetMappings.Single()); }
public static void GetIdentity_of_StorageSetMapping_returns_expected_value() { var entityType = new EntityType("ET", "N", DataSpace.CSpace); var entitySet = new EntitySet("ES", "S", "T", null, entityType); var associationType = new AssociationType("AT", "N", false, DataSpace.CSpace); var associationSet = new AssociationSet("AS", associationType); var entitySetMapping = new StorageEntitySetMapping(entitySet, null); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet); Assert.Equal(entitySet.Identity, BaseMetadataMappingVisitor.IdentityHelper.GetIdentity(entitySetMapping)); Assert.Equal(associationSet.Identity, BaseMetadataMappingVisitor.IdentityHelper.GetIdentity(associationSetMapping)); }
public void Can_get_and_set_store_entity_set() { var entitySet1 = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet1); Assert.Same(entitySet1, associationSetMapping.StoreEntitySet); var entitySet2 = new EntitySet(); associationSetMapping.StoreEntitySet = entitySet2; Assert.Same(entitySet2, associationSetMapping.StoreEntitySet); }
public void Can_get_association_set_mappings() { var entityContainerMapping = new StorageEntityContainerMapping(new EntityContainer("C", DataSpace.CSpace)); Assert.Empty(entityContainerMapping.AssociationSetMappings); Assert.Empty(entityContainerMapping.RelationshipSetMaps); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), entityContainerMapping); entityContainerMapping.AddAssociationSetMapping(associationSetMapping); Assert.Same(associationSetMapping, entityContainerMapping.AssociationSetMappings.Single()); Assert.Same(associationSetMapping, entityContainerMapping.RelationshipSetMaps.Single()); }
public void Can_get_and_set_store_entity_set() { var entitySet1 = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType()); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet1); Assert.Same(entitySet1, associationSetMapping.StoreEntitySet); var entitySet2 = new EntitySet(); associationSetMapping.StoreEntitySet = entitySet2; Assert.Same(entitySet2, associationSetMapping.StoreEntitySet); }
public void Can_add_column_conditions() { var entitySet1 = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet1); Assert.Empty(associationSetMapping.ColumnConditions); var conditionPropertyMapping = new StorageConditionPropertyMapping(null, new EdmProperty("C"), 42, null); associationSetMapping.AddColumnCondition(conditionPropertyMapping); Assert.Same(conditionPropertyMapping, associationSetMapping.ColumnConditions.Single()); }
public void Can_initialize_with_entity_set() { var entitySet = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet); var associationTypeMapping = associationSetMapping.TypeMappings.Single(); Assert.NotNull(associationTypeMapping); Assert.Same(associationSet.ElementType, associationTypeMapping.Types.Single()); Assert.Same(associationSetMapping, associationTypeMapping.SetMapping); var mappingFragment = associationTypeMapping.MappingFragments.Single(); Assert.Same(entitySet, mappingFragment.TableSet); }
public void Can_initialize_with_entity_set() { var entitySet = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType()); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet); var associationTypeMapping = associationSetMapping.TypeMappings.Single(); Assert.NotNull(associationTypeMapping); Assert.Same(associationSet.ElementType, associationTypeMapping.Types.Single()); Assert.Same(associationSetMapping, associationTypeMapping.SetMapping); var mappingFragment = associationTypeMapping.MappingFragments.Single(); Assert.Same(entitySet, mappingFragment.TableSet); }
public void Configure_should_throw_when_configured_table_not_found() { var independentAssociationMappingConfiguration = new ForeignKeyAssociationMappingConfiguration(); independentAssociationMappingConfiguration.ToTable("Split"); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), new EntitySet()) .Initialize(); var database = new EdmModel(DataSpace.SSpace); Assert.Equal( Strings.TableNotFound("Split"), Assert.Throws<InvalidOperationException>( () => independentAssociationMappingConfiguration .Configure(associationSetMapping, database, new MockPropertyInfo())). Message); }
public void Configure_should_split_key_constraint_when_to_table_configuration() { var database = new EdmModel(DataSpace.SSpace); var sourceTable = database.AddTable("Source"); var principalTable = database.AddTable("P"); var fkColumn = new EdmProperty( "Fk", ProviderRegistry.Sql2008_ProviderManifest.GetStoreType( TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String)))); sourceTable.AddColumn(fkColumn); var foreignKeyConstraint = new ForeignKeyBuilder(database, "FK") { PrincipalTable = principalTable }; sourceTable.AddForeignKey(foreignKeyConstraint); foreignKeyConstraint.DependentColumns = new[] { fkColumn }; var targetTable = database.AddTable("Split"); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), database.GetEntitySet(sourceTable)).Initialize(); associationSetMapping.SourceEndMapping.AddProperty(new StorageScalarPropertyMapping(new EdmProperty("PK"), fkColumn)); var independentAssociationMappingConfiguration = new ForeignKeyAssociationMappingConfiguration(); independentAssociationMappingConfiguration.ToTable("Split"); independentAssociationMappingConfiguration.Configure(associationSetMapping, database, new MockPropertyInfo()); Assert.True(targetTable.Properties.Contains(fkColumn)); Assert.True(targetTable.ForeignKeyBuilders.Contains(foreignKeyConstraint)); Assert.False(sourceTable.Properties.Contains(fkColumn)); Assert.False(sourceTable.ForeignKeyBuilders.Contains(foreignKeyConstraint)); Assert.Same(targetTable, associationSetMapping.Table); }
public void Can_get_and_set_source_and_target_end_mappings() { var entitySet1 = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet1); Assert.Null(associationSetMapping.SourceEndMapping); Assert.Null(associationSetMapping.TargetEndMapping); var sourceEndMapping = new StorageEndPropertyMapping(); associationSetMapping.SourceEndMapping = sourceEndMapping; Assert.Same(sourceEndMapping, associationSetMapping.SourceEndMapping); var targetEndMapping = new StorageEndPropertyMapping(); associationSetMapping.TargetEndMapping = targetEndMapping; Assert.Same(targetEndMapping, associationSetMapping.TargetEndMapping); }
public void Can_get_and_set_source__and_target_end_mappings() { var entitySet1 = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType()); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet1); Assert.Null(associationSetMapping.SourceEndMapping); Assert.Null(associationSetMapping.TargetEndMapping); var sourceEndMapping = new StorageEndPropertyMapping(new EdmProperty("P")); associationSetMapping.SourceEndMapping = sourceEndMapping; Assert.Same(sourceEndMapping, associationSetMapping.SourceEndMapping); var targetEndMapping = new StorageEndPropertyMapping(new EdmProperty("P")); associationSetMapping.TargetEndMapping = targetEndMapping; Assert.Same(targetEndMapping, associationSetMapping.TargetEndMapping); }
public void Configure_should_rename_columns_when_left_keys_configured() { var database = new EdmModel().Initialize(); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType()), new EntitySet()) .Initialize(); var column = new EdmProperty("C"); associationSetMapping.SourceEndMapping.AddProperty(new StorageScalarPropertyMapping(new EdmProperty("PK"), column)); var manyToManyAssociationMappingConfiguration = new ManyToManyAssociationMappingConfiguration(); manyToManyAssociationMappingConfiguration.MapLeftKey("NewName"); var mockPropertyInfo = new MockPropertyInfo(); associationSetMapping.SourceEndMapping.EndMember = new AssociationEndMember("S", new EntityType()); associationSetMapping.SourceEndMapping.EndMember.SetClrPropertyInfo(mockPropertyInfo); manyToManyAssociationMappingConfiguration.Configure(associationSetMapping, database, mockPropertyInfo); Assert.Equal("NewName", column.Name); }
public void WriteAssociationSetMapping_should_write_modification_function_mapping() { var fixture = new Fixture(); var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("ES", "S", null, null, entityType); new EntityContainer("EC", DataSpace.SSpace).AddEntitySetBase(entitySet); var associationSet = new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)); var associationEndMember1 = new AssociationEndMember("Source", new EntityType("E", "N", DataSpace.CSpace)); associationSet.AddAssociationSetEnd(new AssociationSetEnd(entitySet, associationSet, associationEndMember1)); var associationEndMember2 = new AssociationEndMember("Target", new EntityType("E", "N", DataSpace.CSpace)); associationSet.AddAssociationSetEnd(new AssociationSetEnd(entitySet, associationSet, associationEndMember2)); var storageModificationFunctionMapping = new StorageModificationFunctionMapping( associationSet, associationSet.ElementType, new EdmFunction("F", "N", DataSpace.SSpace, new EdmFunctionPayload()), new[] { new StorageModificationFunctionParameterBinding( new FunctionParameter( "P", TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)), ParameterMode.In), new StorageModificationFunctionMemberPath( new EdmMember[] { new EdmProperty("K"), associationEndMember1 }, associationSet), true), new StorageModificationFunctionParameterBinding( new FunctionParameter( "P", TypeUsage.Create(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32)), ParameterMode.In), new StorageModificationFunctionMemberPath( new EdmMember[] { new EdmProperty("K"), associationEndMember2 }, associationSet), false) }, null, null); var associationSetMapping = new StorageAssociationSetMapping( associationSet, entitySet) { SourceEndMapping = new StorageEndPropertyMapping { EndMember = associationEndMember1 }, TargetEndMapping = new StorageEndPropertyMapping { EndMember = associationEndMember2 }, ModificationFunctionMapping = new StorageAssociationSetModificationFunctionMapping( associationSet, storageModificationFunctionMapping, storageModificationFunctionMapping) }; fixture.Writer.WriteAssociationSetMappingElement(associationSetMapping); Assert.Equal( @"<AssociationSetMapping Name=""AS"" TypeName="".A"" StoreEntitySet=""E""> <EndProperty Name=""Source"" /> <EndProperty Name=""Target"" /> <ModificationFunctionMapping> <InsertFunction FunctionName=""N.F""> <EndProperty Name=""Source""> <ScalarProperty Name=""K"" ParameterName=""P"" Version=""Current"" /> </EndProperty> <EndProperty Name=""Target""> <ScalarProperty Name=""K"" ParameterName=""P"" Version=""Original"" /> </EndProperty> </InsertFunction> <DeleteFunction FunctionName=""N.F""> <EndProperty Name=""Source""> <ScalarProperty Name=""K"" ParameterName=""P"" Version=""Current"" /> </EndProperty> <EndProperty Name=""Target""> <ScalarProperty Name=""K"" ParameterName=""P"" Version=""Original"" /> </EndProperty> </DeleteFunction> </ModificationFunctionMapping> </AssociationSetMapping>", fixture.ToString()); }
internal void Configure(StorageAssociationSetMapping associationSetMapping, DbDatabaseMapping databaseMapping) { DebugCheck.NotNull(associationSetMapping); DebugCheck.NotNull(databaseMapping); // We may apply configuration twice from two different NavigationPropertyConfiguration objects, // but that should be okay since they were validated as consistent above. // We still apply twice because each object may have different pieces of the full configuration. if (AssociationMappingConfiguration != null) { // This may replace a configuration previously set, but that's okay since we validated // consistency when processing the configuration above. associationSetMapping.SetConfiguration(this); AssociationMappingConfiguration.Configure(associationSetMapping, databaseMapping.Database, _navigationProperty); } }
public void Can_generate_function_mappings_for_many_to_many_association_set_mapping() { var databaseMapping = new DbDatabaseMapping() .Initialize(new EdmModel(DataSpace.CSpace), new EdmModel(DataSpace.SSpace)); var entityType1 = databaseMapping.Model.AddEntityType("E1"); entityType1.Annotations.SetClrType(typeof(string)); databaseMapping.Model.AddEntitySet("E1Set", entityType1); var entityType2 = databaseMapping.Model.AddEntityType("E2"); entityType2.Annotations.SetClrType(typeof(string)); databaseMapping.Model.AddEntitySet("E2Set", entityType2); var entityTypeConfiguration = new EntityTypeConfiguration(typeof(object)); entityTypeConfiguration.MapToStoredProcedures(); entityType1.SetConfiguration(entityTypeConfiguration); entityType2.SetConfiguration(entityTypeConfiguration); var associationSet = databaseMapping.Model.AddAssociationSet( "M2MSet", databaseMapping.Model.AddAssociationType( "M2M", entityType1, RelationshipMultiplicity.Many, entityType2, RelationshipMultiplicity.Many)); var entitySet = new EntitySet("ES", "S", null, null, new EntityType("E", "N", DataSpace.CSpace)); var associationEndMember1 = new AssociationEndMember("Source", new EntityType("E", "N", DataSpace.CSpace)); associationSet.AddAssociationSetEnd(new AssociationSetEnd(entitySet, associationSet, associationEndMember1)); var associationEndMember2 = new AssociationEndMember("Target", new EntityType("E", "N", DataSpace.CSpace)); associationSet.AddAssociationSetEnd(new AssociationSetEnd(entitySet, associationSet, associationEndMember2)); var associationSetMapping = new StorageAssociationSetMapping( associationSet, entitySet) { SourceEndMapping = new StorageEndPropertyMapping() { EndMember = associationEndMember1 }, TargetEndMapping = new StorageEndPropertyMapping() { EndMember = associationEndMember2 } }; associationSetMapping.SourceEndMapping .AddProperty(new StorageScalarPropertyMapping(new EdmProperty("PK"), new EdmProperty("FooId"))); associationSetMapping.TargetEndMapping .AddProperty(new StorageScalarPropertyMapping(new EdmProperty("PK"), new EdmProperty("BarId"))); var functionMappingGenerator = new ModificationFunctionMappingGenerator(ProviderRegistry.Sql2008_ProviderManifest); functionMappingGenerator.Generate(associationSetMapping, databaseMapping); var modificationFunctionMapping = associationSetMapping.ModificationFunctionMapping; Assert.NotNull(modificationFunctionMapping); var functionMapping = modificationFunctionMapping.InsertFunctionMapping; Assert.NotNull(functionMapping); Assert.Equal(2, functionMapping.ParameterBindings.Count); Assert.Null(functionMapping.ResultBindings); var function = functionMapping.Function; Assert.NotNull(function); Assert.Equal("M2M_Insert", function.Name); Assert.Equal(2, function.Parameters.Count); functionMapping = modificationFunctionMapping.DeleteFunctionMapping; Assert.NotNull(functionMapping); Assert.Equal(2, functionMapping.ParameterBindings.Count); Assert.Null(functionMapping.ResultBindings); function = modificationFunctionMapping.DeleteFunctionMapping.Function; Assert.NotNull(function); Assert.Equal("M2M_Delete", function.Name); Assert.Equal(2, function.Parameters.Count); }
public static StorageAssociationSetMapping AddAssociationSetMapping( this DbDatabaseMapping databaseMapping, AssociationSet associationSet, EntitySet entitySet) { DebugCheck.NotNull(databaseMapping); DebugCheck.NotNull(associationSet); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet).Initialize(); databaseMapping .EntityContainerMappings .Single() .AddAssociationSetMapping(associationSetMapping); return associationSetMapping; }
internal override void Configure( StorageAssociationSetMapping associationSetMapping, EdmModel database, PropertyInfo navigationProperty) { DebugCheck.NotNull(associationSetMapping); DebugCheck.NotNull(navigationProperty); // By convention source end contains the dependent column mappings var propertyMappings = associationSetMapping.SourceEndMapping.PropertyMappings.ToList(); if (_tableName != null) { var targetTable = ((from t in database.EntityTypes let n = t.GetTableName() where (n != null && n.Equals(_tableName)) select t) .SingleOrDefault()) ?? (from es in database.GetEntitySets() where string.Equals(es.Table, _tableName.Name, StringComparison.Ordinal) select es.ElementType).SingleOrDefault(); if (targetTable == null) { throw Error.TableNotFound(_tableName); } var sourceTable = associationSetMapping.Table; if (sourceTable != targetTable) { var foreignKeyConstraint = sourceTable.ForeignKeyBuilders .Single(fk => fk.DependentColumns.SequenceEqual(propertyMappings.Select(pm => pm.ColumnProperty))); sourceTable.RemoveForeignKey(foreignKeyConstraint); targetTable.AddForeignKey(foreignKeyConstraint); foreignKeyConstraint.DependentColumns .Each( c => { var isKey = c.IsPrimaryKeyColumn; sourceTable.RemoveMember(c); targetTable.AddMember(c); if (isKey) { targetTable.AddKeyMember(c); } }); associationSetMapping.StoreEntitySet = database.GetEntitySet(targetTable); } } if ((_keyColumnNames.Count > 0) && (_keyColumnNames.Count != propertyMappings.Count())) { throw Error.IncorrectColumnCount(string.Join(", ", _keyColumnNames)); } _keyColumnNames.Each((n, i) => propertyMappings[i].ColumnProperty.Name = n); }
public void WriteAssociationSetMappingElement(StorageAssociationSetMapping associationSetMapping) { DebugCheck.NotNull(associationSetMapping); _xmlWriter.WriteStartElement(StorageMslConstructs.AssociationSetMappingElement); _xmlWriter.WriteAttributeString( StorageMslConstructs.AssociationSetMappingNameAttribute, associationSetMapping.AssociationSet.Name); _xmlWriter.WriteAttributeString( StorageMslConstructs.AssociationSetMappingTypeNameAttribute, _entityTypeNamespace + "." + associationSetMapping.AssociationSet.ElementType.Name); _xmlWriter.WriteAttributeString( StorageMslConstructs.AssociationSetMappingStoreEntitySetAttribute, associationSetMapping.Table.Name); WriteAssociationEndMappingElement(associationSetMapping.SourceEndMapping); WriteAssociationEndMappingElement(associationSetMapping.TargetEndMapping); if (associationSetMapping.ModificationFunctionMapping != null) { WriteModificationFunctionMapping(associationSetMapping.ModificationFunctionMapping); } foreach (var conditionColumn in associationSetMapping.ColumnConditions) { WriteConditionElement(conditionColumn); } _xmlWriter.WriteEndElement(); }
private IEnumerable<EdmProperty> GenerateIndependentForeignKeyColumns( EntityType principalEntityType, EntityType dependentEntityType, StorageAssociationSetMapping associationSetMapping, StorageEndPropertyMapping associationEndMapping, EntityType dependentTable, bool isPrimaryKeyColumn, NavigationProperty principalNavigationProperty) { DebugCheck.NotNull(principalEntityType); DebugCheck.NotNull(associationEndMapping); DebugCheck.NotNull(dependentTable); foreach (var property in principalEntityType.KeyProperties()) { var columnName = ((principalNavigationProperty != null) ? principalNavigationProperty.Name : principalEntityType.Name) + "_" + property.Name; var foreignKeyColumn = MapTableColumn(property, columnName, false); dependentTable.AddColumn(foreignKeyColumn); if (isPrimaryKeyColumn) { dependentTable.AddKeyMember(foreignKeyColumn); } foreignKeyColumn.Nullable = associationEndMapping.EndMember.IsOptional() || (associationEndMapping.EndMember.IsRequired() && dependentEntityType.BaseType != null); foreignKeyColumn.StoreGeneratedPattern = StoreGeneratedPattern.None; yield return foreignKeyColumn; associationEndMapping.AddProperty(new StorageScalarPropertyMapping(property, foreignKeyColumn)); if (foreignKeyColumn.Nullable) { associationSetMapping .AddColumnCondition(new StorageConditionPropertyMapping(null, foreignKeyColumn, null, false)); } } }
internal override void Configure( StorageAssociationSetMapping associationSetMapping, EdmModel database, PropertyInfo navigationProperty) { DebugCheck.NotNull(associationSetMapping); DebugCheck.NotNull(database); DebugCheck.NotNull(navigationProperty); var table = associationSetMapping.Table; if (_tableName != null) { table.SetTableName(_tableName); table.SetConfiguration(this); } var sourceEndIsPrimaryConfiguration = navigationProperty.IsSameAs( associationSetMapping.SourceEndMapping.EndMember.GetClrPropertyInfo()); ConfigureColumnNames( sourceEndIsPrimaryConfiguration ? _leftKeyColumnNames : _rightKeyColumnNames, associationSetMapping.SourceEndMapping.PropertyMappings.ToList()); ConfigureColumnNames( sourceEndIsPrimaryConfiguration ? _rightKeyColumnNames : _leftKeyColumnNames, associationSetMapping.TargetEndMapping.PropertyMappings.ToList()); }
private static void MoveAssociationSetMappingDependents( StorageAssociationSetMapping associationSetMapping, StorageEndPropertyMapping dependentMapping, EntitySet toSet, bool useExistingColumns) { DebugCheck.NotNull(associationSetMapping); DebugCheck.NotNull(dependentMapping); DebugCheck.NotNull(toSet); var toTable = toSet.ElementType; dependentMapping.PropertyMappings.Each( pm => { var oldColumn = pm.ColumnProperty; pm.ColumnProperty = TableOperations.MoveColumnAndAnyConstraints( associationSetMapping.Table, toTable, oldColumn, useExistingColumns); associationSetMapping.ColumnConditions .Where(cc => cc.ColumnProperty == oldColumn) .Each(cc => cc.ColumnProperty = pm.ColumnProperty); }); associationSetMapping.StoreEntitySet = toSet; }
internal abstract void Configure( StorageAssociationSetMapping associationSetMapping, EdmModel database, PropertyInfo navigationProperty);
public void Can_add_column_conditions() { var entitySet1 = new EntitySet(); var associationSet = new AssociationSet("AS", new AssociationType()); var associationSetMapping = new StorageAssociationSetMapping(associationSet, entitySet1); Assert.Empty(associationSetMapping.ColumnConditions); var conditionPropertyMapping = new StorageConditionPropertyMapping(null, new EdmProperty("C"), 42, null); associationSetMapping.AddColumnCondition(conditionPropertyMapping); Assert.Same(conditionPropertyMapping, associationSetMapping.ColumnConditions.Single()); }
public void Configure_should_throw_when_incorrect_number_of_columns_configured() { var database = new EdmModel(DataSpace.CSpace); var associationSetMapping = new StorageAssociationSetMapping( new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), new EntitySet()) .Initialize(); var manyToManyAssociationMappingConfiguration = new ManyToManyAssociationMappingConfiguration(); manyToManyAssociationMappingConfiguration.MapLeftKey("Id1", "Id2"); var mockPropertyInfo = new MockPropertyInfo(); associationSetMapping.SourceEndMapping.EndMember = new AssociationEndMember("S", new EntityType("E", "N", DataSpace.CSpace)); associationSetMapping.SourceEndMapping.EndMember.SetClrPropertyInfo(mockPropertyInfo); Assert.Equal( Strings.IncorrectColumnCount("Id1, Id2"), Assert.Throws<InvalidOperationException>( () => manyToManyAssociationMappingConfiguration.Configure(associationSetMapping, database, mockPropertyInfo)).Message); }
private void GenerateIndependentForeignKeyConstraint( DbDatabaseMapping databaseMapping, EntityType principalEntityType, EntityType dependentEntityType, EntityType dependentTable, StorageAssociationSetMapping associationSetMapping, StorageEndPropertyMapping associationEndMapping, string name, AssociationEndMember principalEnd, bool isPrimaryKeyColumn = false) { DebugCheck.NotNull(databaseMapping); DebugCheck.NotNull(principalEntityType); DebugCheck.NotNull(dependentTable); DebugCheck.NotNull(associationEndMapping); DebugCheck.NotEmpty(name); var principalTable = GetEntityTypeMappingInHierarchy(databaseMapping, principalEntityType) .MappingFragments .Single() .Table; var foreignKeyConstraint = new ForeignKeyBuilder(databaseMapping.Database, name) { PrincipalTable = principalTable, DeleteAction = associationEndMapping.EndMember.DeleteBehavior != OperationAction.None ? associationEndMapping.EndMember.DeleteBehavior : OperationAction.None }; var principalNavigationProperty = databaseMapping.Model.EntityTypes .SelectMany(e => e.DeclaredNavigationProperties) .SingleOrDefault(n => n.ResultEnd == principalEnd); dependentTable.AddForeignKey(foreignKeyConstraint); foreignKeyConstraint.DependentColumns = GenerateIndependentForeignKeyColumns( principalEntityType, dependentEntityType, associationSetMapping, associationEndMapping, dependentTable, isPrimaryKeyColumn, principalNavigationProperty); }