/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void AddColumnNameAndTypeConfiguration( [NotNull] PropertyConfiguration propertyConfiguration) { Check.NotNull(propertyConfiguration, nameof(propertyConfiguration)); var delimitedColumnName = AnnotationProvider.For(propertyConfiguration.Property).ColumnName != null && AnnotationProvider.For(propertyConfiguration.Property).ColumnName != propertyConfiguration.Property.Name ? CSharpUtilities.DelimitString( AnnotationProvider.For(propertyConfiguration.Property).ColumnName) : null; var delimitedColumnTypeName = AnnotationProvider.For(propertyConfiguration.Property).ColumnType != null ? CSharpUtilities.DelimitString( AnnotationProvider.For(propertyConfiguration.Property).ColumnType) : null; if (delimitedColumnName != null && delimitedColumnTypeName != null) { propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ true, nameof(RelationalPropertyBuilderExtensions.HasColumnName), delimitedColumnName)); propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ true, nameof(RelationalPropertyBuilderExtensions.HasColumnType), delimitedColumnTypeName)); propertyConfiguration.AttributeConfigurations.Add( _configurationFactory.CreateAttributeConfiguration( nameof(ColumnAttribute), delimitedColumnName, nameof(ColumnAttribute.TypeName) + " = " + delimitedColumnTypeName)); } else if (delimitedColumnName != null) { propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ true, nameof(RelationalPropertyBuilderExtensions.HasColumnName), delimitedColumnName)); propertyConfiguration.AttributeConfigurations.Add( _configurationFactory.CreateAttributeConfiguration(nameof(ColumnAttribute), delimitedColumnName)); } else if (delimitedColumnTypeName != null) { propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ true, nameof(RelationalPropertyBuilderExtensions.HasColumnType), delimitedColumnTypeName)); propertyConfiguration.AttributeConfigurations.Add( _configurationFactory.CreateAttributeConfiguration( nameof(ColumnAttribute), nameof(ColumnAttribute.TypeName) + " = " + delimitedColumnTypeName)); } }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual string ClassName() { var annotatedName = AnnotationProvider.For(Model).DatabaseName; if (!string.IsNullOrEmpty(annotatedName)) { return(CSharpUtilities.GenerateCSharpIdentifier(annotatedName + DbContextSuffix, null)); } return(DefaultDbContextName); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void AddValueGeneratedConfiguration( [NotNull] PropertyConfiguration propertyConfiguration) { Check.NotNull(propertyConfiguration, nameof(propertyConfiguration)); if (!((Property)propertyConfiguration.Property).GetValueGeneratedConfigurationSource().HasValue) { return; } var valueGenerated = propertyConfiguration.Property.ValueGenerated; switch (valueGenerated) { case ValueGenerated.OnAdd: // If this property is the single integer primary key on the EntityType then // KeyConvention assumes ValueGeneratedOnAdd() so there is no need to add it. if (_keyConvention.FindValueGeneratedOnAddProperty( new List <Property> { (Property)propertyConfiguration.Property }, (EntityType)propertyConfiguration.EntityConfiguration.EntityType) == null && AnnotationProvider.For(propertyConfiguration.Property).DefaultValueSql == null) { propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ false, nameof(PropertyBuilder.ValueGeneratedOnAdd))); } break; case ValueGenerated.OnAddOrUpdate: propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ false, nameof(PropertyBuilder.ValueGeneratedOnAddOrUpdate))); break; case ValueGenerated.Never: propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ false, nameof(PropertyBuilder.ValueGeneratedNever))); break; default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void AddComputedExpressionConfiguration( [NotNull] PropertyConfiguration propertyConfiguration) { Check.NotNull(propertyConfiguration, nameof(propertyConfiguration)); if (AnnotationProvider.For(propertyConfiguration.Property).ComputedColumnSql != null) { propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ false, nameof(RelationalPropertyBuilderExtensions.HasComputedColumnSql), CSharpUtilities.DelimitString( AnnotationProvider.For(propertyConfiguration.Property).ComputedColumnSql))); } }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void AddDefaultValueConfiguration( [NotNull] PropertyConfiguration propertyConfiguration) { Check.NotNull(propertyConfiguration, nameof(propertyConfiguration)); if (AnnotationProvider.For(propertyConfiguration.Property).DefaultValue != null) { propertyConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ false, nameof(RelationalPropertyBuilderExtensions.HasDefaultValue), CSharpUtilities.GenerateLiteral( (dynamic)AnnotationProvider.For(propertyConfiguration.Property).DefaultValue))); } }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void AddTableNameConfiguration([NotNull] EntityConfiguration entityConfiguration) { Check.NotNull(entityConfiguration, nameof(entityConfiguration)); var entityType = entityConfiguration.EntityType; if (AnnotationProvider.For(entityType).Schema != null && AnnotationProvider.For(entityType).Schema != AnnotationProvider.For(Model).DefaultSchema) { var delimitedTableName = CSharpUtilities.DelimitString(AnnotationProvider.For(entityType).TableName); var delimitedSchemaName = CSharpUtilities.DelimitString(AnnotationProvider.For(entityType).Schema); entityConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ true, nameof(RelationalEntityTypeBuilderExtensions.ToTable), delimitedTableName, delimitedSchemaName)); entityConfiguration.AttributeConfigurations.Add( _configurationFactory.CreateAttributeConfiguration( nameof(TableAttribute), delimitedTableName, nameof(TableAttribute.Schema) + " = " + delimitedSchemaName)); } else if (AnnotationProvider.For(entityType).TableName != null && AnnotationProvider.For(entityType).TableName != entityType.Scaffolding().DbSetName) { var delimitedTableName = CSharpUtilities.DelimitString(AnnotationProvider.For(entityType).TableName); entityConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( /* hasAttributeEquivalent */ true, nameof(RelationalEntityTypeBuilderExtensions.ToTable), delimitedTableName)); entityConfiguration.AttributeConfigurations.Add( _configurationFactory.CreateAttributeConfiguration( nameof(TableAttribute), delimitedTableName)); } }
public override void AddTableNameConfiguration(EntityConfiguration entityConfiguration) { // Rather than being smart, we're just always configuring the // table name for every entity. var entityType = entityConfiguration.EntityType; var delimitedTableName = CSharpUtilities.DelimitString(AnnotationProvider.For(entityType).TableName); var delimitedSchemaName = CSharpUtilities.DelimitString(AnnotationProvider.For(entityType).Schema); entityConfiguration.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( true, /* <= hasAttributeEquivalent */ nameof(RelationalEntityTypeBuilderExtensions.ToTable), delimitedTableName, delimitedSchemaName)); entityConfiguration.AttributeConfigurations.Add( _configurationFactory.CreateAttributeConfiguration( nameof(TableAttribute), delimitedTableName, $"{nameof(TableAttribute.Schema)} = {delimitedSchemaName}")); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual void AddSequenceConfigurations() { _sequenceConfigurations = new List <SequenceConfiguration>(); foreach (var sequence in AnnotationProvider.For(Model).Sequences) { var config = _configurationFactory.CreateSequenceConfiguration(); config.NameIdentifier = CSharpUtilities.DelimitString(sequence.Name); if (sequence.ClrType != Sequence.DefaultClrType) { config.TypeIdentifier = CSharpUtilities.GetTypeName(sequence.ClrType); } if (!string.IsNullOrEmpty(sequence.Schema) && AnnotationProvider.For(Model).DefaultSchema != sequence.Schema) { config.SchemaNameIdentifier = CSharpUtilities.DelimitString(sequence.Schema); } if (sequence.StartValue != Sequence.DefaultStartValue) { config.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( false, nameof(RelationalSequenceBuilder.StartsAt), sequence.StartValue.ToString(CultureInfo.InvariantCulture))); } if (sequence.IncrementBy != Sequence.DefaultIncrementBy) { config.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( false, nameof(RelationalSequenceBuilder.IncrementsBy), sequence.IncrementBy.ToString(CultureInfo.InvariantCulture))); } if (sequence.MinValue != Sequence.DefaultMinValue) { config.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( false, nameof(RelationalSequenceBuilder.HasMin), sequence.MinValue?.ToString(CultureInfo.InvariantCulture) ?? "")); } if (sequence.MaxValue != Sequence.DefaultMaxValue) { config.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( false, nameof(RelationalSequenceBuilder.HasMax), sequence.MaxValue?.ToString(CultureInfo.InvariantCulture) ?? "")); } if (sequence.IsCyclic != Sequence.DefaultIsCyclic) { config.FluentApiConfigurations.Add( _configurationFactory.CreateFluentApiConfiguration( false, nameof(RelationalSequenceBuilder.IsCyclic))); } _sequenceConfigurations.Add(config); } }