Beispiel #1
0
        public static EdmProperty RemoveDefaultDiscriminatorCondition(
            this MappingFragment entityTypeMappingFragment)
        {
            EdmProperty defaultDiscriminator = entityTypeMappingFragment.GetDefaultDiscriminator();

            if (defaultDiscriminator != null && entityTypeMappingFragment.ColumnConditions.Any <ConditionPropertyMapping>())
            {
                entityTypeMappingFragment.ClearConditions();
            }
            entityTypeMappingFragment.RemoveDefaultDiscriminatorAnnotation();
            return(defaultDiscriminator);
        }
Beispiel #2
0
        public static EdmProperty RemoveDefaultDiscriminatorCondition(
            this MappingFragment entityTypeMappingFragment)
        {
            DebugCheck.NotNull(entityTypeMappingFragment);

            var discriminatorColumn = entityTypeMappingFragment.GetDefaultDiscriminator();

            if (discriminatorColumn != null &&
                entityTypeMappingFragment.ColumnConditions.Any())
            {
                Debug.Assert(entityTypeMappingFragment.ColumnConditions.Count() == 1);

                entityTypeMappingFragment.ClearConditions();
            }

            entityTypeMappingFragment.RemoveDefaultDiscriminatorAnnotation();

            return(discriminatorColumn);
        }
Beispiel #3
0
 private void ConfigureConditions(
     DbDatabaseMapping databaseMapping,
     EntityType entityType,
     MappingFragment fragment,
     DbProviderManifest providerManifest)
 {
     if (!this.ValueConditions.Any <ValueConditionConfiguration>() && !this.NullabilityConditions.Any <NotNullConditionConfiguration>())
     {
         return;
     }
     fragment.ClearConditions();
     foreach (ValueConditionConfiguration valueCondition in this.ValueConditions)
     {
         valueCondition.Configure(databaseMapping, fragment, entityType, providerManifest);
     }
     foreach (NotNullConditionConfiguration nullabilityCondition in this.NullabilityConditions)
     {
         nullabilityCondition.Configure(databaseMapping, fragment, entityType);
     }
 }
Beispiel #4
0
        private void ConfigureConditions(
            DbDatabaseMapping databaseMapping,
            EntityType entityType,
            MappingFragment fragment,
            DbProviderManifest providerManifest)
        {
            if (ValueConditions.Any() ||
                NullabilityConditions.Any())
            {
                fragment.ClearConditions();

                foreach (var condition in ValueConditions)
                {
                    condition.Configure(databaseMapping, fragment, entityType, providerManifest);
                }

                foreach (var condition in NullabilityConditions)
                {
                    condition.Configure(databaseMapping, fragment, entityType);
                }
            }
        }
Beispiel #5
0
        // <summary>
        // Makes sure only the required property mappings are present
        // </summary>
        private static void ConfigureTypeMappings(
            TableMapping tableMapping,
            Dictionary <EntityType, EntityTypeMapping> rootMappings,
            EntityType entityType,
            MappingFragment propertiesTypeMappingFragment,
            MappingFragment conditionTypeMappingFragment)
        {
            var existingPropertyMappings =
                new List <ColumnMappingBuilder>(
                    propertiesTypeMappingFragment.ColumnMappings.Where(pm => !pm.ColumnProperty.IsPrimaryKeyColumn));
            var existingConditions = new List <ConditionPropertyMapping>(propertiesTypeMappingFragment.ColumnConditions);

            foreach (var columnMapping in from cm in tableMapping.ColumnMappings
                     from pm in cm.PropertyMappings
                     where pm.EntityType == entityType
                     select new
            {
                cm.Column,
                Property = pm
            })
            {
                if (columnMapping.Property.PropertyPath != null
                    &&
                    !IsRootTypeMapping(
                        rootMappings, columnMapping.Property.EntityType, columnMapping.Property.PropertyPath))
                {
                    var existingPropertyMapping =
                        propertiesTypeMappingFragment.ColumnMappings.SingleOrDefault(
                            x => x.PropertyPath == columnMapping.Property.PropertyPath);
                    if (existingPropertyMapping != null)
                    {
                        existingPropertyMappings.Remove(existingPropertyMapping);
                    }
                    else
                    {
                        existingPropertyMapping
                            = new ColumnMappingBuilder(columnMapping.Column, columnMapping.Property.PropertyPath);

                        propertiesTypeMappingFragment.AddColumnMapping(existingPropertyMapping);
                    }
                }

                if (columnMapping.Property.Conditions != null)
                {
                    foreach (var condition in columnMapping.Property.Conditions)
                    {
                        if (conditionTypeMappingFragment.ColumnConditions.Contains(condition))
                        {
                            existingConditions.Remove(condition);
                        }
                        else if (!entityType.Abstract)
                        {
                            conditionTypeMappingFragment.AddConditionProperty(condition);
                        }
                    }
                }
            }

            // Any leftover mappings are removed
            foreach (var leftoverPropertyMapping in existingPropertyMappings)
            {
                propertiesTypeMappingFragment.RemoveColumnMapping(leftoverPropertyMapping);
            }

            foreach (var leftoverCondition in existingConditions)
            {
                conditionTypeMappingFragment.RemoveConditionProperty(leftoverCondition);
            }

            if (entityType.Abstract)
            {
                propertiesTypeMappingFragment.ClearConditions();
            }
        }
Beispiel #6
0
        private static void ConfigureTypeMappings(
            TableMapping tableMapping,
            Dictionary <EntityType, EntityTypeMapping> rootMappings,
            EntityType entityType,
            MappingFragment propertiesTypeMappingFragment,
            MappingFragment conditionTypeMappingFragment)
        {
            List <ColumnMappingBuilder>     columnMappingBuilderList     = new List <ColumnMappingBuilder>(propertiesTypeMappingFragment.ColumnMappings.Where <ColumnMappingBuilder>((Func <ColumnMappingBuilder, bool>)(pm => !pm.ColumnProperty.IsPrimaryKeyColumn)));
            List <ConditionPropertyMapping> conditionPropertyMappingList = new List <ConditionPropertyMapping>(propertiesTypeMappingFragment.ColumnConditions);

            foreach (var data in tableMapping.ColumnMappings.SelectMany((Func <ColumnMapping, IEnumerable <PropertyMappingSpecification> >)(cm => (IEnumerable <PropertyMappingSpecification>)cm.PropertyMappings), (cm, pm) => new
            {
                cm = cm,
                pm = pm
            }).Where(_param1 => _param1.pm.EntityType == entityType).Select(_param0 => new
            {
                Column = _param0.cm.Column,
                Property = _param0.pm
            }))
            {
                var columnMapping = data;
                if (columnMapping.Property.PropertyPath != null && !EntityMappingService.IsRootTypeMapping(rootMappings, columnMapping.Property.EntityType, columnMapping.Property.PropertyPath))
                {
                    ColumnMappingBuilder columnMappingBuilder1 = propertiesTypeMappingFragment.ColumnMappings.SingleOrDefault <ColumnMappingBuilder>((Func <ColumnMappingBuilder, bool>)(x => x.PropertyPath == columnMapping.Property.PropertyPath));
                    if (columnMappingBuilder1 != null)
                    {
                        columnMappingBuilderList.Remove(columnMappingBuilder1);
                    }
                    else
                    {
                        ColumnMappingBuilder columnMappingBuilder2 = new ColumnMappingBuilder(columnMapping.Column, columnMapping.Property.PropertyPath);
                        propertiesTypeMappingFragment.AddColumnMapping(columnMappingBuilder2);
                    }
                }
                if (columnMapping.Property.Conditions != null)
                {
                    foreach (ConditionPropertyMapping condition in (IEnumerable <ConditionPropertyMapping>)columnMapping.Property.Conditions)
                    {
                        if (conditionTypeMappingFragment.ColumnConditions.Contains <ConditionPropertyMapping>(condition))
                        {
                            conditionPropertyMappingList.Remove(condition);
                        }
                        else if (!entityType.Abstract)
                        {
                            conditionTypeMappingFragment.AddConditionProperty(condition);
                        }
                    }
                }
            }
            foreach (ColumnMappingBuilder columnMappingBuilder in columnMappingBuilderList)
            {
                propertiesTypeMappingFragment.RemoveColumnMapping(columnMappingBuilder);
            }
            foreach (ConditionPropertyMapping condition in conditionPropertyMappingList)
            {
                conditionTypeMappingFragment.RemoveConditionProperty(condition);
            }
            if (!entityType.Abstract)
            {
                return;
            }
            propertiesTypeMappingFragment.ClearConditions();
        }