コード例 #1
0
        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;
        }
コード例 #2
0
        /// <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;
                }
            }
        }
コード例 #3
0
 /// <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;
     }
 }
コード例 #4
0
 private string  CreateTableName(RelationalEntityTypeAnnotations relational, int siteId)
 {
     ///没有变化,等于原来的。
     return(relational.TableName);
 }