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