Exemple #1
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());
                }
            }

            var oracleRunGenerator = new OracleRunGenerator();

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