Example #1
0
        private string SEQName(TableOperation op)
        {
            var name = string.Format("SEQ_{0}_{1}", this.Prepare(op.TableName), this.Prepare(op.PKName));

            name = OracleMigrationProvider.LimitOracleIdentifier(name);
            return(name);
        }
Example #2
0
        /// <summary>
        /// 加载指定数据库的所有表中的自增列。
        /// </summary>
        /// <param name="database">指定的数据库对象</param>
        protected override void LoadAllIdentities(Database database)
        {
            //从数据库中加载出所有的 Sequence 的名字。
            var sequenceNames = new List <string>();

            using (var reader = this.Db.QueryDataReader(@"SELECT * FROM USER_SEQUENCES"))
            {
                while (reader.Read())
                {
                    sequenceNames.Add(reader["SEQUENCE_NAME"].ToString());
                }
            }

            //如果主键对应的 Sequence 存在,则表示这个主键是 Identity 列。
            //详见:OracleRunGenerator.Generate(CreateTable op)。
            foreach (var table in database.Tables)
            {
                var pk = table.FindPrimaryColumn();
                if (pk != null)
                {
                    var sequenceName = OracleMigrationProvider.SequenceName(table.Name, pk.Name);
                    if (sequenceNames.Contains(sequenceName, StringComparer.CurrentCultureIgnoreCase))
                    {
                        pk.IsIdentity = true;
                    }
                }
            }
        }
        public static DbMigrationProvider GetProvider(DbSetting dbSetting)
        {
            DbMigrationProvider provider = null;

            //ISqlConverter Factory
            switch (dbSetting.ProviderName)
            {
                case DbConnectionSchema.Provider_SqlClient:
                    provider = new SqlServerMigrationProvider();
                    break;
                case DbConnectionSchema.Provider_SqlCe:
                    provider = new SqlServerCeMigrationProvider();
                    break;
                //case "System.Data.Odbc":
                //    return new ODBCProvider();
                default:
                    if (DbConnectionSchema.IsOracleProvider(dbSetting))
                    {
                        provider = new OracleMigrationProvider();
                        break;
                    }
                    throw new NotSupportedException("This type of database is not supportted now:" + dbSetting.ProviderName);
            }

            provider.DbSetting = dbSetting;

            return provider;
        }
Example #4
0
        /// <summary>
        /// 由于 Oracle 中 FK 最长是 30 个字符,所以这里需要对多余的字符串做截取操作。
        /// </summary>
        /// <param name="op"></param>
        /// <returns></returns>
        private static void PrepareFKConstraintName(FKConstraintOperation op)
        {
            var constraintName = op.ConstraintName;

            if (constraintName.StartsWith("FK_"))
            {
                constraintName = constraintName.Substring(3);
            }

            op.ConstraintName = OracleMigrationProvider.LimitOracleIdentifier(constraintName);
        }
Example #5
0
        protected override void GenerateAddPKConstraint(IndentedTextWriter sql, string tableName, string columnName)
        {
            var pkName = string.Format("PK_{0}_{1}",
                                       this.Prepare(tableName), this.Prepare(columnName)
                                       );

            pkName = OracleMigrationProvider.LimitOracleIdentifier(pkName);

            sql.Write(@"
ALTER TABLE ");
            sql.Write(this.Quote(tableName));
            sql.Write(@"
    ADD CONSTRAINT ");
            sql.Write(this.Quote(pkName));
            sql.Write(@"
    PRIMARY KEY (");
            sql.Write(this.Quote(columnName));
            sql.Write(")");
        }
Example #6
0
 private string SEQName(TableOperation op)
 {
     return(OracleMigrationProvider.SequenceName(op.TableName, op.PKName));
 }
Example #7
0
 protected override string Prepare(string identifier)
 {
     return(OracleMigrationProvider.PrepareIdentifier(identifier));
 }