private void AddDependentAndPrincipalNavigationPropertyAnnotations([NotNull] IModel codeGenModel) { Check.NotNull(codeGenModel, nameof(codeGenModel)); var entityTypeToExistingIdentifiers = new Dictionary <IEntityType, List <string> >(); foreach (var entityType in codeGenModel.EntityTypes) { var existingIdentifiers = new List <string>(); entityTypeToExistingIdentifiers.Add(entityType, existingIdentifiers); existingIdentifiers.Add(entityType.Name); existingIdentifiers.AddRange( ModelUtilities.OrderedProperties(entityType).Select(p => p.Name)); } foreach (var entityType in codeGenModel.EntityTypes) { var dependentEndExistingIdentifiers = entityTypeToExistingIdentifiers[entityType]; foreach (var foreignKey in entityType.GetForeignKeys().Cast <ForeignKey>()) { // set up the name of the navigation property on the dependent end of the foreign key var dependentEndNavigationPropertyCandidateName = ModelUtilities.GetDependentEndCandidateNavigationPropertyName(foreignKey); var dependentEndNavigationPropertyName = CSharpUtilities.GenerateCSharpIdentifier( dependentEndNavigationPropertyCandidateName, dependentEndExistingIdentifiers, NavigationUniquifier); foreignKey.AddAnnotation( AnnotationNameDependentEndNavPropName, dependentEndNavigationPropertyName); dependentEndExistingIdentifiers.Add(dependentEndNavigationPropertyName); // set up the name of the navigation property on the principal end of the foreign key var principalEndExistingIdentifiers = entityTypeToExistingIdentifiers[foreignKey.PrincipalEntityType]; var principalEndNavigationPropertyCandidateName = foreignKey.IsSelfReferencing() ? string.Format( CultureInfo.CurrentCulture, SelfReferencingPrincipalEndNavigationNamePattern, dependentEndNavigationPropertyName) : ModelUtilities.GetPrincipalEndCandidateNavigationPropertyName(foreignKey); var principalEndNavigationPropertyName = CSharpUtilities.GenerateCSharpIdentifier( principalEndNavigationPropertyCandidateName, principalEndExistingIdentifiers, NavigationUniquifier); foreignKey.AddAnnotation( AnnotationNamePrincipalEndNavPropName, principalEndNavigationPropertyName); principalEndExistingIdentifiers.Add(principalEndNavigationPropertyName); } } }
/// <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); }
public override string ClassName() { var builder = new SqlConnectionStringBuilder(CustomConfiguration.ConnectionString); if (builder.InitialCatalog != null) { return(CSharpUtilities.GenerateCSharpIdentifier( builder.InitialCatalog + DbContextSuffix, null)); } return(base.ClassName()); }
public override string ClassName() { var sqliteConnection = new SqliteConnectionStringBuilder(CustomConfiguration.ConnectionString); if (sqliteConnection.DataSource != null) { var fileName = Path.GetFileNameWithoutExtension(sqliteConnection.DataSource); return(CSharpUtilities.GenerateCSharpIdentifier( fileName + DbContextSuffix, null)); } return(base.ClassName()); }