private Tuple <EntityTypeModificationFunctionMapping, ModificationFunctionMapping> GetFunctionMapping(
                ExtractedStateEntry stateEntry)
            {
                EntityType index = stateEntry.Current == null ? (EntityType)stateEntry.Original.StructuralType : (EntityType)stateEntry.Current.StructuralType;
                EntityTypeModificationFunctionMapping typeMapping = this.m_typeMappings[index];
                ModificationFunctionMapping           mapping;

                switch (stateEntry.State)
                {
                case EntityState.Unchanged:
                case EntityState.Modified:
                    mapping = typeMapping.UpdateFunctionMapping;
                    EntityUtil.ValidateNecessaryModificationFunctionMapping(mapping, "Update", stateEntry.Source, "EntityType", index.Name);
                    break;

                case EntityState.Added:
                    mapping = typeMapping.InsertFunctionMapping;
                    EntityUtil.ValidateNecessaryModificationFunctionMapping(mapping, "Insert", stateEntry.Source, "EntityType", index.Name);
                    break;

                case EntityState.Deleted:
                    mapping = typeMapping.DeleteFunctionMapping;
                    EntityUtil.ValidateNecessaryModificationFunctionMapping(mapping, "Delete", stateEntry.Source, "EntityType", index.Name);
                    break;

                default:
                    mapping = (ModificationFunctionMapping)null;
                    break;
                }
                return(Tuple.Create <EntityTypeModificationFunctionMapping, ModificationFunctionMapping>(typeMapping, mapping));
            }
Пример #2
0
 public DynamicToFunctionModificationCommandConverter(
     EntityTypeModificationFunctionMapping entityTypeModificationFunctionMapping,
     EntityContainerMapping entityContainerMapping)
 {
     this._entityTypeModificationFunctionMapping = entityTypeModificationFunctionMapping;
     this._entityContainerMapping = entityContainerMapping;
 }
Пример #3
0
        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);
            }
        }
Пример #4
0
        public void Generate(EntityType entityType, DbDatabaseMapping databaseMapping)
        {
            if (entityType.Abstract)
            {
                return;
            }
            EntitySet                   entitySet        = databaseMapping.Model.GetEntitySet(entityType);
            EntitySetMapping            entitySetMapping = databaseMapping.GetEntitySetMapping(entitySet);
            List <ColumnMappingBuilder> list1            = ModificationFunctionMappingGenerator.GetColumnMappings(entityType, entitySetMapping).ToList <ColumnMappingBuilder>();
            List <Tuple <ModificationFunctionMemberPath, EdmProperty> > list2 = ModificationFunctionMappingGenerator.GetIndependentFkColumns(entityType, databaseMapping).ToList <Tuple <ModificationFunctionMemberPath, EdmProperty> >();
            ModificationFunctionMapping functionMapping1 = this.GenerateFunctionMapping(ModificationOperator.Insert, (EntitySetBase)entitySetMapping.EntitySet, (EntityTypeBase)entityType, databaseMapping, (IEnumerable <EdmProperty>)entityType.Properties, (IEnumerable <Tuple <ModificationFunctionMemberPath, EdmProperty> >)list2, (IList <ColumnMappingBuilder>)list1, entityType.Properties.Where <EdmProperty>((Func <EdmProperty, bool>)(p => p.HasStoreGeneratedPattern())), (string)null);
            ModificationFunctionMapping functionMapping2 = this.GenerateFunctionMapping(ModificationOperator.Update, (EntitySetBase)entitySetMapping.EntitySet, (EntityTypeBase)entityType, databaseMapping, (IEnumerable <EdmProperty>)entityType.Properties, (IEnumerable <Tuple <ModificationFunctionMemberPath, EdmProperty> >)list2, (IList <ColumnMappingBuilder>)list1, entityType.Properties.Where <EdmProperty>((Func <EdmProperty, bool>)(p =>
            {
                StoreGeneratedPattern?generatedPattern = p.GetStoreGeneratedPattern();
                if (generatedPattern.GetValueOrDefault() == StoreGeneratedPattern.Computed)
                {
                    return(generatedPattern.HasValue);
                }
                return(false);
            })), (string)null);
            ModificationFunctionMapping           functionMapping3            = this.GenerateFunctionMapping(ModificationOperator.Delete, (EntitySetBase)entitySetMapping.EntitySet, (EntityTypeBase)entityType, databaseMapping, (IEnumerable <EdmProperty>)entityType.Properties, (IEnumerable <Tuple <ModificationFunctionMemberPath, EdmProperty> >)list2, (IList <ColumnMappingBuilder>)list1, (IEnumerable <EdmProperty>)null, (string)null);
            EntityTypeModificationFunctionMapping modificationFunctionMapping = new EntityTypeModificationFunctionMapping(entityType, functionMapping3, functionMapping1, functionMapping2);

            entitySetMapping.AddModificationFunctionMapping(modificationFunctionMapping);
        }
 private void WriteModificationFunctionMapping(
     EntityTypeModificationFunctionMapping modificationFunctionMapping)
 {
     this._xmlWriter.WriteStartElement("ModificationFunctionMapping");
     this.WriteFunctionMapping("InsertFunction", modificationFunctionMapping.InsertFunctionMapping, false);
     this.WriteFunctionMapping("UpdateFunction", modificationFunctionMapping.UpdateFunctionMapping, false);
     this.WriteFunctionMapping("DeleteFunction", modificationFunctionMapping.DeleteFunctionMapping, false);
     this._xmlWriter.WriteEndElement();
 }
Пример #6
0
        public DynamicToFunctionModificationCommandConverter(
            EntityTypeModificationFunctionMapping entityTypeModificationFunctionMapping,
            EntityContainerMapping entityContainerMapping)
        {
            DebugCheck.NotNull(entityTypeModificationFunctionMapping);
            DebugCheck.NotNull(entityContainerMapping);

            _entityTypeModificationFunctionMapping = entityTypeModificationFunctionMapping;
            _entityContainerMapping = entityContainerMapping;
        }
Пример #7
0
        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();
        }
Пример #8
0
 public virtual void Configure(
     EntityTypeModificationFunctionMapping modificationStoredProcedureMapping,
     DbProviderManifest providerManifest)
 {
     if (this._insertModificationStoredProcedureConfiguration != null)
     {
         this._insertModificationStoredProcedureConfiguration.Configure(modificationStoredProcedureMapping.InsertFunctionMapping, providerManifest);
     }
     if (this._updateModificationStoredProcedureConfiguration != null)
     {
         this._updateModificationStoredProcedureConfiguration.Configure(modificationStoredProcedureMapping.UpdateFunctionMapping, providerManifest);
     }
     if (this._deleteModificationStoredProcedureConfiguration == null)
     {
         return;
     }
     this._deleteModificationStoredProcedureConfiguration.Configure(modificationStoredProcedureMapping.DeleteFunctionMapping, providerManifest);
 }
Пример #9
0
        private void ConfigureModificationStoredProcedures(
            DbDatabaseMapping databaseMapping,
            EntityType entityType,
            DbProviderManifest providerManifest)
        {
            if (this._modificationStoredProceduresConfiguration == null)
            {
                return;
            }
            new ModificationFunctionMappingGenerator(providerManifest).Generate(entityType, databaseMapping);
            EntityTypeModificationFunctionMapping modificationStoredProcedureMapping = databaseMapping.GetEntitySetMappings().SelectMany <EntitySetMapping, EntityTypeModificationFunctionMapping>((Func <EntitySetMapping, IEnumerable <EntityTypeModificationFunctionMapping> >)(esm => (IEnumerable <EntityTypeModificationFunctionMapping>)esm.ModificationFunctionMappings)).SingleOrDefault <EntityTypeModificationFunctionMapping>((Func <EntityTypeModificationFunctionMapping, bool>)(mfm => mfm.EntityType == entityType));

            if (modificationStoredProcedureMapping == null)
            {
                return;
            }
            this._modificationStoredProceduresConfiguration.Configure(modificationStoredProcedureMapping, providerManifest);
        }
        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);
        }