示例#1
0
        /// <summary>
        /// Check then add primary keys to schema table
        /// </summary>
        private async Task SetPrimaryKeysAsync(SyncTable schemaTable, DbTableBuilder tableBuilder, DbConnection connection, DbTransaction transaction)
        {
            // Get PrimaryKey
            var schemaPrimaryKeys = await tableBuilder.GetPrimaryKeysAsync(connection, transaction).ConfigureAwait(false);

            if (schemaPrimaryKeys == null || schemaPrimaryKeys.Any() == false)
            {
                throw new MissingPrimaryKeyException(schemaTable.TableName);
            }

            // Set the primary Key
            foreach (var rowColumn in schemaPrimaryKeys.OrderBy(r => r.Ordinal))
            {
                // Find the column in the schema columns
                var columnKey = schemaTable.Columns.FirstOrDefault(sc => sc.EqualsByName(rowColumn));

                if (columnKey == null)
                {
                    throw new MissingPrimaryKeyColumnException(rowColumn.ColumnName, schemaTable.TableName);
                }

                schemaTable.PrimaryKeys.Add(columnKey.ColumnName);
            }
        }
        /// <summary>
        /// Check then add primary keys to schema table
        /// </summary>
        private async Task SetPrimaryKeysAsync(SyncTable schemaTable, DbTableBuilder tableBuilder, DbConnection connection, DbTransaction transaction)
        {
            // Get PrimaryKey
            var schemaPrimaryKeys = await tableBuilder.GetPrimaryKeysAsync(connection, transaction).ConfigureAwait(false);

            if (schemaPrimaryKeys == null || schemaPrimaryKeys.Any() == false)
            {
                throw new MissingPrimaryKeyException(schemaTable.TableName);
            }

            // Set the primary Key
            foreach (var rowColumn in schemaPrimaryKeys.OrderBy(r => r.Ordinal))
            {
                // Find the column in the schema columns
                var columnKey = schemaTable.Columns.FirstOrDefault(sc => sc.EqualsByName(rowColumn));

                if (columnKey == null)
                {
                    throw new MissingPrimaryKeyColumnException(rowColumn.ColumnName, schemaTable.TableName);
                }

                var columnNameLower = columnKey.ColumnName.ToLowerInvariant();
                if (columnNameLower == "update_scope_id" ||
                    columnNameLower == "timestamp" ||
                    columnNameLower == "timestamp_bigint" ||
                    columnNameLower == "sync_row_is_tombstone" ||
                    columnNameLower == "last_change_datetime"
                    )
                {
                    throw new UnsupportedPrimaryKeyColumnNameException(schemaTable.GetFullName(), columnKey.ColumnName, columnKey.OriginalTypeName, this.Provider.GetProviderTypeName());
                }


                schemaTable.PrimaryKeys.Add(columnKey.ColumnName);
            }
        }