Example #1
0
        private static void RemoveRedundantTables(DbDatabaseMapping databaseMapping)
        {
            DebugCheck.NotNull(databaseMapping);

            var tables
                = (from t in databaseMapping.Database.EntityTypes
                   where databaseMapping.GetEntitySetMappings()
                   .SelectMany(esm => esm.EntityTypeMappings)
                   .SelectMany(etm => etm.MappingFragments)
                   .All(etmf => etmf.Table != t) &&
                   databaseMapping.GetAssociationSetMappings().All(asm => asm.Table != t)
                   select t).ToList();

            tables.Each(
                t =>
            {
                var tableName = t.GetTableName();

                if (tableName != null)
                {
                    throw Error.OrphanedConfiguredTableDetected(tableName);
                }

                databaseMapping.Database.RemoveEntityType(t);

                // Remove any FKs on the removed table
                var associationTypes
                    = databaseMapping.Database.AssociationTypes
                      .Where(at => at.SourceEnd.GetEntityType() == t ||
                             at.TargetEnd.GetEntityType() == t)
                      .ToList();

                associationTypes.Each(at => databaseMapping.Database.RemoveAssociationType(at));
            });
        }
        private void ConfigureAssociationMappings(
            DbDatabaseMapping databaseMapping, EntityType entityType, DbProviderManifest providerManifest)
        {
            DebugCheck.NotNull(databaseMapping);
            DebugCheck.NotNull(entityType);
            DebugCheck.NotNull(providerManifest);

            foreach (var configuration in _navigationPropertyConfigurations)
            {
                var propertyInfo = configuration.Key;
                var navigationPropertyConfiguration = configuration.Value;
                var navigationProperty = entityType.GetNavigationProperty(propertyInfo);

                if (navigationProperty == null)
                {
                    throw Error.NavigationPropertyNotFound(propertyInfo.Name, entityType.Name);
                }

                var associationSetMapping
                    = databaseMapping.GetAssociationSetMappings()
                      .SingleOrDefault(asm => asm.AssociationSet.ElementType == navigationProperty.Association);

                if (associationSetMapping != null)
                {
                    navigationPropertyConfiguration.Configure(associationSetMapping, databaseMapping, providerManifest);
                }
            }
        }
Example #3
0
 private static IEnumerable <Tuple <ModificationFunctionMemberPath, EdmProperty> > GetIndependentFkColumns(
     EntityType entityType,
     DbDatabaseMapping databaseMapping)
 {
     foreach (AssociationSetMapping associationSetMapping in databaseMapping.GetAssociationSetMappings())
     {
         AssociationType associationType = associationSetMapping.AssociationSet.ElementType;
         if (!associationType.IsManyToMany())
         {
             AssociationEndMember _;
             AssociationEndMember dependentEnd;
             if (!associationType.TryGuessPrincipalAndDependentEnds(out _, out dependentEnd))
             {
                 dependentEnd = associationType.TargetEnd;
             }
             EntityType dependentEntityType = dependentEnd.GetEntityType();
             if (dependentEntityType == entityType || ModificationFunctionMappingGenerator.GetParents(entityType).Contains <EntityType>(dependentEntityType))
             {
                 EndPropertyMapping endPropertyMapping = associationSetMapping.TargetEndMapping.AssociationEnd != dependentEnd ? associationSetMapping.TargetEndMapping : associationSetMapping.SourceEndMapping;
                 foreach (ScalarPropertyMapping propertyMapping in endPropertyMapping.PropertyMappings)
                 {
                     yield return(Tuple.Create <ModificationFunctionMemberPath, EdmProperty>(new ModificationFunctionMemberPath((IEnumerable <EdmMember>) new EdmMember[2]
                     {
                         (EdmMember)propertyMapping.Property,
                         (EdmMember)dependentEnd
                     }, associationSetMapping.AssociationSet), propertyMapping.Column));
                 }
             }
         }
     }
 }
Example #4
0
 private static void RemoveRedundantTables(DbDatabaseMapping databaseMapping)
 {
     databaseMapping.Database.EntityTypes.Where <EntityType>((Func <EntityType, bool>)(t =>
     {
         if (databaseMapping.GetEntitySetMappings().SelectMany <EntitySetMapping, EntityTypeMapping>((Func <EntitySetMapping, IEnumerable <EntityTypeMapping> >)(esm => (IEnumerable <EntityTypeMapping>)esm.EntityTypeMappings)).SelectMany <EntityTypeMapping, MappingFragment>((Func <EntityTypeMapping, IEnumerable <MappingFragment> >)(etm => (IEnumerable <MappingFragment>)etm.MappingFragments)).All <MappingFragment>((Func <MappingFragment, bool>)(etmf => etmf.Table != t)))
         {
             return(databaseMapping.GetAssociationSetMappings().All <AssociationSetMapping>((Func <AssociationSetMapping, bool>)(asm => asm.Table != t)));
         }
         return(false);
     })).ToList <EntityType>().Each <EntityType>((Action <EntityType>)(t =>
     {
         DatabaseName tableName = t.GetTableName();
         if (tableName != null)
         {
             throw Error.OrphanedConfiguredTableDetected((object)tableName);
         }
         databaseMapping.Database.RemoveEntityType(t);
         databaseMapping.Database.AssociationTypes.Where <AssociationType>((Func <AssociationType, bool>)(at =>
         {
             if (at.SourceEnd.GetEntityType() != t)
             {
                 return(at.TargetEnd.GetEntityType() == t);
             }
             return(true);
         })).ToList <AssociationType>().Each <AssociationType>((Action <AssociationType>)(at => databaseMapping.Database.RemoveAssociationType(at)));
     }));
 }
        private static void UniquifyFunctionNames(DbDatabaseMapping databaseMapping)
        {
            DebugCheck.NotNull(databaseMapping);

            foreach (var modificationFunctionMapping
                     in databaseMapping
                     .GetEntitySetMappings()
                     .SelectMany(esm => esm.ModificationFunctionMappings))
            {
                var entityTypeConfiguration
                    = (EntityTypeConfiguration)modificationFunctionMapping.EntityType.GetConfiguration();

                if (entityTypeConfiguration.ModificationFunctionsConfiguration == null)
                {
                    continue;
                }

                UniquifyFunctionName(
                    databaseMapping,
                    entityTypeConfiguration.ModificationFunctionsConfiguration.InsertModificationFunctionConfiguration,
                    modificationFunctionMapping.InsertFunctionMapping);

                UniquifyFunctionName(
                    databaseMapping,
                    entityTypeConfiguration.ModificationFunctionsConfiguration.UpdateModificationFunctionConfiguration,
                    modificationFunctionMapping.UpdateFunctionMapping);

                UniquifyFunctionName(
                    databaseMapping,
                    entityTypeConfiguration.ModificationFunctionsConfiguration.DeleteModificationFunctionConfiguration,
                    modificationFunctionMapping.DeleteFunctionMapping);
            }

            foreach (var modificationFunctionMapping
                     in databaseMapping
                     .GetAssociationSetMappings()
                     .Select(asm => asm.ModificationFunctionMapping)
                     .Where(asm => asm != null))
            {
                var navigationPropertyConfiguration
                    = (NavigationPropertyConfiguration)modificationFunctionMapping
                      .AssociationSet.ElementType.GetConfiguration();

                if (navigationPropertyConfiguration.ModificationFunctionsConfiguration == null)
                {
                    continue;
                }

                UniquifyFunctionName(
                    databaseMapping,
                    navigationPropertyConfiguration.ModificationFunctionsConfiguration.InsertModificationFunctionConfiguration,
                    modificationFunctionMapping.InsertFunctionMapping);

                UniquifyFunctionName(
                    databaseMapping,
                    navigationPropertyConfiguration.ModificationFunctionsConfiguration.DeleteModificationFunctionConfiguration,
                    modificationFunctionMapping.DeleteFunctionMapping);
            }
        }
Example #6
0
        public void GetEntitySetMappings_should_return_mappings()
        {
            var databaseMapping = new DbDatabaseMapping()
                                  .Initialize(new EdmModel(DataSpace.CSpace), new EdmModel(DataSpace.SSpace));

            databaseMapping.AddAssociationSetMapping(new AssociationSet("AS", new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)), new EntitySet());

            Assert.Equal(1, databaseMapping.GetAssociationSetMappings().Count());
        }
Example #7
0
        public void GetEntitySetMappings_should_return_mappings()
        {
            var databaseMapping = new DbDatabaseMapping()
                                  .Initialize(new EdmModel().Initialize(), new EdmModel());

            databaseMapping.AddAssociationSetMapping(new AssociationSet("AS", new AssociationType()), new EntitySet());

            Assert.Equal(1, databaseMapping.GetAssociationSetMappings().Count());
        }
        private static IEnumerable <Tuple <ModificationFunctionMemberPath, EdmProperty> > GetIndependentFkColumns(
            EntityType entityType, DbDatabaseMapping databaseMapping)
        {
            DebugCheck.NotNull(entityType);
            DebugCheck.NotNull(databaseMapping);

            foreach (var associationSetMapping in databaseMapping.GetAssociationSetMappings())
            {
                var associationType = associationSetMapping.AssociationSet.ElementType;

                if (associationType.IsManyToMany())
                {
                    continue;
                }

                AssociationEndMember _, dependentEnd;
                if (!associationType.TryGuessPrincipalAndDependentEnds(out _, out dependentEnd))
                {
                    dependentEnd = associationType.TargetEnd;
                }

                var dependentEntityType = dependentEnd.GetEntityType();

                if (dependentEntityType == entityType ||
                    GetParents(entityType).Contains(dependentEntityType))
                {
                    var endPropertyMapping
                        = associationSetMapping.TargetEndMapping.AssociationEnd != dependentEnd
                              ? associationSetMapping.TargetEndMapping
                              : associationSetMapping.SourceEndMapping;

                    foreach (var propertyMapping in endPropertyMapping.Properties)
                    {
                        yield return
                            (Tuple.Create(
                                 new ModificationFunctionMemberPath(
                                     new EdmMember[] { propertyMapping.Property, dependentEnd },
                                     associationSetMapping.AssociationSet), propertyMapping.Column));
                    }
                }
            }
        }
Example #9
0
 private void ConfigureAssociationMappings(
     DbDatabaseMapping databaseMapping,
     EntityType entityType,
     DbProviderManifest providerManifest)
 {
     foreach (KeyValuePair <PropertyInfo, NavigationPropertyConfiguration> propertyConfiguration1 in this._navigationPropertyConfigurations)
     {
         PropertyInfo key = propertyConfiguration1.Key;
         NavigationPropertyConfiguration propertyConfiguration2 = propertyConfiguration1.Value;
         NavigationProperty navigationProperty = entityType.GetNavigationProperty(key);
         if (navigationProperty == null)
         {
             throw Error.NavigationPropertyNotFound((object)key.Name, (object)entityType.Name);
         }
         AssociationSetMapping associationSetMapping = databaseMapping.GetAssociationSetMappings().SingleOrDefault <AssociationSetMapping>((Func <AssociationSetMapping, bool>)(asm => asm.AssociationSet.ElementType == navigationProperty.Association));
         if (associationSetMapping != null)
         {
             propertyConfiguration2.Configure(associationSetMapping, databaseMapping, providerManifest);
         }
     }
 }
Example #10
0
 private static void UniquifyFunctionNames(DbDatabaseMapping databaseMapping)
 {
     foreach (EntityTypeModificationFunctionMapping modificationFunctionMapping in databaseMapping.GetEntitySetMappings().SelectMany <EntitySetMapping, EntityTypeModificationFunctionMapping>((Func <EntitySetMapping, IEnumerable <EntityTypeModificationFunctionMapping> >)(esm => (IEnumerable <EntityTypeModificationFunctionMapping>)esm.ModificationFunctionMappings)))
     {
         EntityTypeConfiguration configuration = (EntityTypeConfiguration)modificationFunctionMapping.EntityType.GetConfiguration();
         if (configuration.ModificationStoredProceduresConfiguration != null)
         {
             ModificationStoredProceduresConfiguration proceduresConfiguration = configuration.ModificationStoredProceduresConfiguration;
             System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.UniquifyFunctionName(databaseMapping, proceduresConfiguration.InsertModificationStoredProcedureConfiguration, modificationFunctionMapping.InsertFunctionMapping);
             System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.UniquifyFunctionName(databaseMapping, proceduresConfiguration.UpdateModificationStoredProcedureConfiguration, modificationFunctionMapping.UpdateFunctionMapping);
             System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.UniquifyFunctionName(databaseMapping, proceduresConfiguration.DeleteModificationStoredProcedureConfiguration, modificationFunctionMapping.DeleteFunctionMapping);
         }
     }
     foreach (AssociationSetModificationFunctionMapping modificationFunctionMapping in databaseMapping.GetAssociationSetMappings().Select <AssociationSetMapping, AssociationSetModificationFunctionMapping>((Func <AssociationSetMapping, AssociationSetModificationFunctionMapping>)(asm => asm.ModificationFunctionMapping)).Where <AssociationSetModificationFunctionMapping>((Func <AssociationSetModificationFunctionMapping, bool>)(asm => asm != null)))
     {
         NavigationPropertyConfiguration configuration = (NavigationPropertyConfiguration)modificationFunctionMapping.AssociationSet.ElementType.GetConfiguration();
         if (configuration.ModificationStoredProceduresConfiguration != null)
         {
             System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.UniquifyFunctionName(databaseMapping, configuration.ModificationStoredProceduresConfiguration.InsertModificationStoredProcedureConfiguration, modificationFunctionMapping.InsertFunctionMapping);
             System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.UniquifyFunctionName(databaseMapping, configuration.ModificationStoredProceduresConfiguration.DeleteModificationStoredProcedureConfiguration, modificationFunctionMapping.DeleteFunctionMapping);
         }
     }
 }