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); }
/// <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; }
/// <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); }
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(")"); }
private string SEQName(TableOperation op) { return(OracleMigrationProvider.SequenceName(op.TableName, op.PKName)); }
protected override string Prepare(string identifier) { return(OracleMigrationProvider.PrepareIdentifier(identifier)); }