public void Customize(Microsoft.EntityFrameworkCore.ModelBuilder modelBuilder, DbContext context) { _modelCustomizer.Customize(modelBuilder, context); foreach (IMutableEntityType entityType in modelBuilder.Model.GetEntityTypes()) { entityType.QueryFilter = GetFilter(entityType.ClrType); RelationalEntityTypeAnnotations relational = entityType.Relational(); if (relational.Schema != null) { relational.Schema = relational.Schema.ToLowerInvariant(); } relational.TableName = entityType.Relational().TableName.ToLowerInvariant(); foreach (IMutableProperty property in entityType.GetProperties()) { property.Relational().ColumnName = property.Relational().ColumnName.ToLowerInvariant(); } } Expression <Func <Parameter, bool> > parameterFilter = t => t.SpecificSchema != "pg_catalog" && t.SpecificSchema != "information_schema" && t.DataType != "ARRAY"; modelBuilder.Model.FindEntityType(typeof(Parameter)).QueryFilter = parameterFilter; Expression <Func <Routine, bool> > routineFilter = t => t.SpecificSchema != "pg_catalog" && t.SpecificSchema != "information_schema"; modelBuilder.Model.FindEntityType(typeof(Routine)).QueryFilter = routineFilter; }
/// <summary> /// Changes the database name. This require the databases in the same machine. NOTE: This only work for MySQL right now. /// </summary> /// <param name="database">The database name.</param> /// <remarks> /// This only been used for supporting multiple databases in the same model. This require the databases in the same machine. /// </remarks> public void ChangeDatabase(string database) { // see https://github.com/aspnet/EntityFramework/issues/7936 //if (_context.Model.Relational() is RelationalModelAnnotations relational) //{ // relational.DatabaseName = database; //} var connection = _context.Database.GetDbConnection(); if (connection.State.HasFlag(ConnectionState.Open)) { connection.ChangeDatabase(database); } else { var connectionString = Regex.Replace(connection.ConnectionString, @"(?<=[Dd]atabase=)\w+(?=;)", database, RegexOptions.Singleline); connection.ConnectionString = connectionString; } // Following code only working for mysql. var items = _context.Model.GetEntityTypes(); foreach (var item in items) { if (item.Relational() is RelationalEntityTypeAnnotations) { RelationalEntityTypeAnnotations extensions = (RelationalEntityTypeAnnotations)item.Relational(); extensions.Schema = database; } } }
/// <summary> /// Changes the table name. This require the tables in the same database. /// </summary> /// <param name="table"></param> /// <remarks> /// This only been used for supporting multiple tables in the same model. This require the tables in the same database. /// </remarks> public void ChangeTable(string table) { if (_dbContext.Model.FindEntityType(typeof(TEntity)).Relational() is RelationalEntityTypeAnnotations) { RelationalEntityTypeAnnotations relational = (RelationalEntityTypeAnnotations)_dbContext.Model.FindEntityType(typeof(TEntity)).Relational(); relational.TableName = table; } }
private string CreateTableName(RelationalEntityTypeAnnotations relational, int siteId) { ///没有变化,等于原来的。 return(relational.TableName); }