public void Can_clear_modification_function_mappings() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction("F", "N", DataSpace.SSpace, new EdmFunctionPayload()); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty <ModificationFunctionParameterBinding>(), null, null); var entityFunctionMappings = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMappings); Assert.Equal(1, entitySetMapping.ModificationFunctionMappings.Count()); entitySetMapping.ClearModificationFunctionMappings(); Assert.Equal(0, entitySetMapping.ModificationFunctionMappings.Count()); }
public void PrimaryParameterBindings_should_omit_original_value_parameters_when_update() { var entitySet = new EntitySet(); entitySet.ChangeEntityContainerWithoutCollectionFixup(new EntityContainer("C", DataSpace.CSpace)); var storageModificationFunctionMapping = new ModificationFunctionMapping( entitySet, new EntityType("E", "N", DataSpace.CSpace), new EdmFunction("F", "N", DataSpace.SSpace), new[] { new ModificationFunctionParameterBinding( new FunctionParameter(), new ModificationFunctionMemberPath( new EdmMember[] { new EdmProperty("M") }, null), false) }, null, null); var storageEntityTypeModificationFunctionMapping = new EntityTypeModificationFunctionMapping( new EntityType("E", "N", DataSpace.CSpace), storageModificationFunctionMapping, storageModificationFunctionMapping, storageModificationFunctionMapping); Assert.Equal(2, storageEntityTypeModificationFunctionMapping.PrimaryParameterBindings.Count()); }
public void Can_clear_modification_function_mappings() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction("F", "N", DataSpace.SSpace, new EdmFunctionPayload()); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty<ModificationFunctionParameterBinding>(), null, null); var entityFunctionMappings = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMappings); Assert.Equal(1, entitySetMapping.ModificationFunctionMappings.Count()); entitySetMapping.ClearModificationFunctionMappings(); Assert.Equal(0, entitySetMapping.ModificationFunctionMappings.Count()); }
public virtual void Configure( EntityTypeModificationFunctionMapping modificationStoredProcedureMapping, DbProviderManifest providerManifest) { DebugCheck.NotNull(modificationStoredProcedureMapping); DebugCheck.NotNull(providerManifest); if (_insertModificationStoredProcedureConfiguration != null) { _insertModificationStoredProcedureConfiguration .Configure(modificationStoredProcedureMapping.InsertFunctionMapping, providerManifest); } if (_updateModificationStoredProcedureConfiguration != null) { _updateModificationStoredProcedureConfiguration .Configure(modificationStoredProcedureMapping.UpdateFunctionMapping, providerManifest); } if (_deleteModificationStoredProcedureConfiguration != null) { _deleteModificationStoredProcedureConfiguration .Configure(modificationStoredProcedureMapping.DeleteFunctionMapping, providerManifest); } }
private void AssertModificationFunctionMappingInvariants( EntityTypeModificationFunctionMapping modificationFunctionMapping) { foreach (EntityTypeModificationFunctionMapping modificationFunctionMapping1 in this._modificationFunctionMappings) { ; } }
/// <summary>Removes a function mapping.</summary> /// <param name="modificationFunctionMapping">The function mapping to remove.</param> public void RemoveModificationFunctionMapping( EntityTypeModificationFunctionMapping modificationFunctionMapping) { Check.NotNull <EntityTypeModificationFunctionMapping>(modificationFunctionMapping, nameof(modificationFunctionMapping)); this.ThrowIfReadOnly(); this._modificationFunctionMappings.Remove(modificationFunctionMapping); if (!this._implicitlyMappedAssociationSetEnds.IsValueCreated) { return; } this._implicitlyMappedAssociationSetEnds = new Lazy <List <AssociationSetEnd> >(new Func <List <AssociationSetEnd> >(this.InitializeImplicitlyMappedAssociationSetEnds)); }
/// <summary> /// Removes a function mapping. /// </summary> /// <param name="modificationFunctionMapping">The function mapping to remove.</param> public void RemoveModificationFunctionMapping(EntityTypeModificationFunctionMapping modificationFunctionMapping) { Check.NotNull(modificationFunctionMapping, "modificationFunctionMapping"); ThrowIfReadOnly(); _modificationFunctionMappings.Remove(modificationFunctionMapping); if (_implicitlyMappedAssociationSetEnds.IsValueCreated) { _implicitlyMappedAssociationSetEnds = new Lazy <List <AssociationSetEnd> >( InitializeImplicitlyMappedAssociationSetEnds); } }
private void AssertModificationFunctionMappingInvariants(EntityTypeModificationFunctionMapping modificationFunctionMapping) { DebugCheck.NotNull(modificationFunctionMapping); Debug.Assert( modificationFunctionMapping.EntityType.Equals(Set.ElementType) || Helper.IsSubtypeOf(modificationFunctionMapping.EntityType, Set.ElementType), "attempting to add a modification function mapping with the wrong entity type"); foreach (var existingMapping in _modificationFunctionMappings) { Debug.Assert( !existingMapping.EntityType.Equals(modificationFunctionMapping.EntityType), "modification function mapping already exists for this type"); } }
public void SetReadOnly_is_called_on_child_mapping_items() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction( "F", "N", DataSpace.CSpace, new EdmFunctionPayload { IsFunctionImport = true }); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); container.AddFunctionImport(function); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty <ModificationFunctionParameterBinding>(), null, null); var entityFunctionMapping = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMapping); var entityTypeMapping = new EntityTypeMapping(entitySetMapping); entitySetMapping.AddTypeMapping(entityTypeMapping); Assert.False(entityTypeMapping.IsReadOnly); Assert.False(entityFunctionMapping.IsReadOnly); entitySetMapping.SetReadOnly(); Assert.True(entityTypeMapping.IsReadOnly); Assert.True(entityFunctionMapping.IsReadOnly); }
public void Cannot_remove_modification_function_mapping_when_read_only() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction( "F", "N", DataSpace.CSpace, new EdmFunctionPayload { IsFunctionImport = true }); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); container.AddFunctionImport(function); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty <ModificationFunctionParameterBinding>(), null, null); var entityFunctionMappings = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMappings); entitySetMapping.SetReadOnly(); Assert.Equal( Strings.OperationOnReadOnlyItem, Assert.Throws <InvalidOperationException>( () => entitySetMapping.RemoveModificationFunctionMapping(entityFunctionMappings)).Message); }
public void Can_add_get_remove_modification_function_mappings() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction( "F", "N", DataSpace.CSpace, new EdmFunctionPayload { IsFunctionImport = true }); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); container.AddFunctionImport(function); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty <ModificationFunctionParameterBinding>(), null, null); var entityFunctionMappings = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMappings); Assert.Same(entityFunctionMappings, entitySetMapping.ModificationFunctionMappings.Single()); entitySetMapping.RemoveModificationFunctionMapping(entityFunctionMappings); Assert.Empty(entitySetMapping.ModificationFunctionMappings); }
public void Can_add_get_remove_modification_function_mappings() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction( "F", "N", DataSpace.CSpace, new EdmFunctionPayload { IsFunctionImport = true }); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); container.AddFunctionImport(function); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty<ModificationFunctionParameterBinding>(), null, null); var entityFunctionMappings = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMappings); Assert.Same(entityFunctionMappings, entitySetMapping.ModificationFunctionMappings.Single()); entitySetMapping.RemoveModificationFunctionMapping(entityFunctionMappings); Assert.Empty(entitySetMapping.ModificationFunctionMappings); }
public void Generate(EntityType entityType, DbDatabaseMapping databaseMapping) { DebugCheck.NotNull(entityType); DebugCheck.NotNull(databaseMapping); if (entityType.Abstract) { return; } var entitySet = databaseMapping.Model.GetEntitySet(entityType); Debug.Assert(entitySet != null); var entitySetMapping = databaseMapping.GetEntitySetMapping(entitySet); Debug.Assert(entitySetMapping != null); var columnMappings = GetColumnMappings(entityType, entitySetMapping).ToList(); var iaFkProperties = GetIndependentFkColumns(entityType, databaseMapping).ToList(); var insertFunctionMapping = GenerateFunctionMapping( ModificationOperator.Insert, entitySetMapping.EntitySet, entityType, databaseMapping, entityType.Properties, iaFkProperties, columnMappings, entityType .Properties .Where(p => p.HasStoreGeneratedPattern())); var updateFunctionMapping = GenerateFunctionMapping( ModificationOperator.Update, entitySetMapping.EntitySet, entityType, databaseMapping, entityType.Properties, iaFkProperties, columnMappings, entityType .Properties .Where(p => p.GetStoreGeneratedPattern() == StoreGeneratedPattern.Computed)); var deleteFunctionMapping = GenerateFunctionMapping( ModificationOperator.Delete, entitySetMapping.EntitySet, entityType, databaseMapping, entityType.Properties, iaFkProperties, columnMappings); var modificationStoredProcedureMapping = new EntityTypeModificationFunctionMapping( entityType, deleteFunctionMapping, insertFunctionMapping, updateFunctionMapping); entitySetMapping.AddModificationFunctionMapping(modificationStoredProcedureMapping); }
public void Can_retrieve_properties_and_set_read_only() { var entitySet = new EntitySet(); entitySet.ChangeEntityContainerWithoutCollectionFixup(new EntityContainer("C", DataSpace.CSpace)); var deleteModificationFunctionMapping = new ModificationFunctionMapping( entitySet, new EntityType("E", "N", DataSpace.CSpace), new EdmFunction("F", "N", DataSpace.SSpace), new[] { new ModificationFunctionParameterBinding( new FunctionParameter(), new ModificationFunctionMemberPath( new EdmMember[] { new EdmProperty("M") }, null), false) }, null, null); var insertModificationFunctionMapping = new ModificationFunctionMapping( entitySet, new EntityType("E", "N", DataSpace.CSpace), new EdmFunction("F", "N", DataSpace.SSpace), new[] { new ModificationFunctionParameterBinding( new FunctionParameter(), new ModificationFunctionMemberPath( new EdmMember[] { new EdmProperty("M") }, null), false) }, null, null); var updateModificationFunctionMapping = new ModificationFunctionMapping( entitySet, new EntityType("E", "N", DataSpace.CSpace), new EdmFunction("F", "N", DataSpace.SSpace), new[] { new ModificationFunctionParameterBinding( new FunctionParameter(), new ModificationFunctionMemberPath( new EdmMember[] { new EdmProperty("M") }, null), false) }, null, null); var entityType = new EntityType("E", "N", DataSpace.CSpace); var entityTypeModificationFunctionMapping = new EntityTypeModificationFunctionMapping( entityType, deleteModificationFunctionMapping, insertModificationFunctionMapping, updateModificationFunctionMapping); Assert.Same(entityTypeModificationFunctionMapping.EntityType, entityType); Assert.Same(entityTypeModificationFunctionMapping.DeleteFunctionMapping, deleteModificationFunctionMapping); Assert.Same(entityTypeModificationFunctionMapping.InsertFunctionMapping, insertModificationFunctionMapping); Assert.Same(entityTypeModificationFunctionMapping.UpdateFunctionMapping, updateModificationFunctionMapping); Assert.False(entityTypeModificationFunctionMapping.IsReadOnly); Assert.False(deleteModificationFunctionMapping.IsReadOnly); Assert.False(insertModificationFunctionMapping.IsReadOnly); Assert.False(updateModificationFunctionMapping.IsReadOnly); entityTypeModificationFunctionMapping.SetReadOnly(); Assert.True(entityTypeModificationFunctionMapping.IsReadOnly); Assert.True(deleteModificationFunctionMapping.IsReadOnly); Assert.True(insertModificationFunctionMapping.IsReadOnly); Assert.True(updateModificationFunctionMapping.IsReadOnly); }
private void WriteModificationFunctionMapping(EntityTypeModificationFunctionMapping modificationFunctionMapping) { DebugCheck.NotNull(modificationFunctionMapping); _xmlWriter.WriteStartElement(MslConstructs.ModificationFunctionMappingElement); WriteFunctionMapping(MslConstructs.InsertFunctionElement, modificationFunctionMapping.InsertFunctionMapping); WriteFunctionMapping(MslConstructs.UpdateFunctionElement, modificationFunctionMapping.UpdateFunctionMapping); WriteFunctionMapping(MslConstructs.DeleteFunctionElement, modificationFunctionMapping.DeleteFunctionMapping); _xmlWriter.WriteEndElement(); }
public void Cannot_remove_modification_function_mapping_when_read_only() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction( "F", "N", DataSpace.CSpace, new EdmFunctionPayload { IsFunctionImport = true }); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); container.AddFunctionImport(function); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty<ModificationFunctionParameterBinding>(), null, null); var entityFunctionMappings = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMappings); entitySetMapping.SetReadOnly(); Assert.Equal( Strings.OperationOnReadOnlyItem, Assert.Throws<InvalidOperationException>( () => entitySetMapping.RemoveModificationFunctionMapping(entityFunctionMappings)).Message); }
public void SetReadOnly_is_called_on_child_mapping_items() { var entityType = new EntityType("E", "N", DataSpace.CSpace); var entitySet = new EntitySet("S", "N", null, null, entityType); var function = new EdmFunction( "F", "N", DataSpace.CSpace, new EdmFunctionPayload { IsFunctionImport = true }); var container = new EntityContainer("C", DataSpace.CSpace); container.AddEntitySetBase(entitySet); container.AddFunctionImport(function); var entitySetMapping = new EntitySetMapping( entitySet, new EntityContainerMapping(container)); var functionMapping = new ModificationFunctionMapping( entitySet, entityType, function, Enumerable.Empty<ModificationFunctionParameterBinding>(), null, null); var entityFunctionMapping = new EntityTypeModificationFunctionMapping(entityType, functionMapping, null, null); entitySetMapping.AddModificationFunctionMapping(entityFunctionMapping); var entityTypeMapping = new EntityTypeMapping(entitySetMapping); entitySetMapping.AddTypeMapping(entityTypeMapping); Assert.False(entityTypeMapping.IsReadOnly); Assert.False(entityFunctionMapping.IsReadOnly); entitySetMapping.SetReadOnly(); Assert.True(entityTypeMapping.IsReadOnly); Assert.True(entityFunctionMapping.IsReadOnly); }
// <summary> // Finds interesting members for modification functions mapped to stored procedures and adds them to the // <paramref // name="interestingMembers" /> // . // </summary> // <param name="functionMappings"> Modification function mapping. Must not be null. </param> // <param name="interestingMembersKind"> Update scenario the members will be used in (in general - partial update vs. full update). </param> private static void FindInterestingFunctionMappingMembers( EntityTypeModificationFunctionMapping functionMappings, InterestingMembersKind interestingMembersKind, ref List<EdmMember> interestingMembers) { DebugCheck.NotNull(functionMappings); DebugCheck.NotNull(functionMappings.UpdateFunctionMapping); DebugCheck.NotNull(interestingMembers); // for partial update scenarios (e.g. EntityDataSourceControl) all members are interesting otherwise the data may be corrupt. // See bugs #272992 and #124460 in DevDiv database for more details. For full update scenarios and the obsolete // MetadataWorkspace.GetRequiredOriginalValueMembers() metod we return only members with Version set to "Original". if (interestingMembersKind == InterestingMembersKind.PartialUpdate) { // (5) Members included in Update ModificationFunction interestingMembers.AddRange( functionMappings.UpdateFunctionMapping.ParameterBindings.Select(p => p.MemberPath.Members.Last())); } else { //(4) Members in update ModificationFunction with Version="Original" are "interesting" // This also works when you have complex-types (4.1) Debug.Assert( interestingMembersKind == InterestingMembersKind.FullUpdate || interestingMembersKind == InterestingMembersKind.RequiredOriginalValueMembers, "Unexpected kind of interesting members - if you changed the InterestingMembersKind enum type update this code accordingly"); foreach (var parameterBinding in functionMappings.UpdateFunctionMapping.ParameterBindings.Where(p => !p.IsCurrent)) { //Last is the root element (with respect to the Entity) //For example, Entity1={ // S1, // C1{S2, // C2{ S3, S4 } // }, // S5} // if S4 matches (i.e. C1.C2.S4), then it returns C1 //because internally the list is [S4][C2][C1] interestingMembers.Add(parameterBinding.MemberPath.Members.Last()); } } }
/// <summary> /// Removes a function mapping. /// </summary> /// <param name="modificationFunctionMapping">The function mapping to remove.</param> public void RemoveModificationFunctionMapping(EntityTypeModificationFunctionMapping modificationFunctionMapping) { Check.NotNull(modificationFunctionMapping, "modificationFunctionMapping"); ThrowIfReadOnly(); _modificationFunctionMappings.Remove(modificationFunctionMapping); if (_implicitlyMappedAssociationSetEnds.IsValueCreated) { _implicitlyMappedAssociationSetEnds = new Lazy<List<AssociationSetEnd>>( InitializeImplicitlyMappedAssociationSetEnds); } }