private string GetColumnNameTakingIntoAccountSchema(IProperty property, DatabaseTable table, bool isView = false) { var modelSchema = table.Schema == _defaultSchema ? null : table.Schema; var columnName = isView ? property.GetColumnName(StoreObjectIdentifier.View(table.Name, modelSchema)) : property.GetColumnName(StoreObjectIdentifier.Table(table.Name, modelSchema)); return(columnName); }
/// <inheritdoc /> public virtual void ProcessModelFinalizing(IConventionModelBuilder modelBuilder, IConventionContext <IConventionModelBuilder> context) { var nonTphRoots = new HashSet <IConventionEntityType>(); foreach (var entityType in modelBuilder.Metadata.GetEntityTypes()) { if (entityType.BaseType == null) { continue; } var tableName = entityType.GetTableName(); var schema = entityType.GetSchema(); if (tableName != null && (tableName != entityType.BaseType.GetTableName() || schema != entityType.BaseType.GetSchema())) { nonTphRoots.Add(entityType.GetRootType()); foreach (var property in entityType.BaseType.GetProperties()) { if (property.IsPrimaryKey()) { continue; } property.Builder.HasColumnName(null, StoreObjectIdentifier.Table(tableName, schema)); } } var viewName = entityType.GetViewName(); var viewSchema = entityType.GetViewSchema(); if (viewName != null && (viewName != entityType.BaseType.GetViewName() || viewSchema != entityType.BaseType.GetViewSchema())) { nonTphRoots.Add(entityType.GetRootType()); foreach (var property in entityType.BaseType.GetProperties()) { if (property.IsPrimaryKey()) { continue; } property.Builder.HasColumnName(null, StoreObjectIdentifier.View(viewName, viewSchema)); } } } foreach (var root in nonTphRoots) { root.Builder.HasNoDiscriminator(); } }
public virtual void ProcessModelFinalizing( IConventionModelBuilder modelBuilder, IConventionContext <IConventionModelBuilder> context) { foreach (var entityType in modelBuilder.Metadata.GetEntityTypes()) { foreach (var property in entityType.GetDeclaredProperties()) { SqlServerValueGenerationStrategy?strategy = null; var table = entityType.GetTableName(); if (table != null) { var storeObject = StoreObjectIdentifier.Table(table, entityType.GetSchema()); strategy = property.GetValueGenerationStrategy(storeObject); if (strategy == SqlServerValueGenerationStrategy.None && !IsStrategyNoneNeeded(property, storeObject)) { strategy = null; } } else { var view = entityType.GetViewName(); if (view != null) { var storeObject = StoreObjectIdentifier.View(view, entityType.GetViewSchema()); strategy = property.GetValueGenerationStrategy(storeObject); if (strategy == SqlServerValueGenerationStrategy.None && !IsStrategyNoneNeeded(property, storeObject)) { strategy = null; } } } // Needed for the annotation to show up in the model snapshot if (strategy != null) { property.Builder.HasValueGenerationStrategy(strategy); } } }
/// <inheritdoc /> public virtual void ProcessModelFinalizing( IConventionModelBuilder modelBuilder, IConventionContext <IConventionModelBuilder> context) { foreach (var entityType in modelBuilder.Metadata.GetEntityTypes()) { foreach (var property in entityType.GetDeclaredProperties()) { SqlServerValueGenerationStrategy?strategy = null; var table = entityType.GetTableName(); if (table != null) { var storeObject = StoreObjectIdentifier.Table(table, entityType.GetSchema()); strategy = property.GetValueGenerationStrategy(storeObject, Dependencies.TypeMappingSource); if (strategy == SqlServerValueGenerationStrategy.None && !IsStrategyNoneNeeded(property, storeObject)) { strategy = null; } } else { var view = entityType.GetViewName(); if (view != null) { var storeObject = StoreObjectIdentifier.View(view, entityType.GetViewSchema()); strategy = property.GetValueGenerationStrategy(storeObject, Dependencies.TypeMappingSource); if (strategy == SqlServerValueGenerationStrategy.None && !IsStrategyNoneNeeded(property, storeObject)) { strategy = null; } } } // Needed for the annotation to show up in the model snapshot if (strategy != null) { property.Builder.HasValueGenerationStrategy(strategy); } } } bool IsStrategyNoneNeeded(IReadOnlyProperty property, StoreObjectIdentifier storeObject) { if (property.ValueGenerated == ValueGenerated.OnAdd && !property.TryGetDefaultValue(storeObject, out _) && property.GetDefaultValueSql(storeObject) == null && property.GetComputedColumnSql(storeObject) == null && property.DeclaringEntityType.Model.GetValueGenerationStrategy() == SqlServerValueGenerationStrategy.IdentityColumn) { var providerClrType = (property.GetValueConverter() ?? (property.FindRelationalTypeMapping(storeObject) ?? Dependencies.TypeMappingSource.FindMapping((IProperty)property))?.Converter) ?.ProviderClrType.UnwrapNullableType(); return(providerClrType != null && (providerClrType.IsInteger() || providerClrType == typeof(decimal))); } return(false); } }