/// <summary> /// Copies data from customer.note field into a new note in the collection. /// </summary> public override void Up() { //// Don't exeucte if the column is already there var columns = _sqlSyntax.GetColumnsInSchema(_database).ToArray(); if ( columns.Any( x => x.TableName.InvariantEquals("merchCustomer") && x.ColumnName.InvariantEquals("notes"))) { var dtos = _database.Fetch <CustomerDto>("SELECT * FROM merchCustomer WHERE notes IS NOT NULL"); var notes = new List <INote>(); foreach (var dto in dtos) { var note = _noteService.CreateNote( dto.Key, Core.Constants.TypeFieldKeys.Entity.CustomerKey, dto.Notes); note.InternalOnly = true; notes.Add(note); } if (notes.Any()) { _noteService.Save(notes); } //// now remove the notes column from the merchCustomer table //// We can't do this without messing up the Migration. //Delete.Column("notes").FromTable("merchCustomer"); } }
private void ValidateDbColumns(DatabaseSchemaResult result) { //Check columns in configured database against columns in schema var columnsInDatabase = _sqlSyntaxProvider.GetColumnsInSchema(_database); var columnsPerTableInDatabase = columnsInDatabase.Select(x => string.Concat(x.TableName, ",", x.ColumnName)).ToList(); var columnsPerTableInSchema = result.TableDefinitions.SelectMany(x => x.Columns.Select(y => string.Concat(y.TableName, ",", y.Name))).ToList(); //Add valid and invalid column differences to the result object var validColumnDifferences = columnsPerTableInDatabase.Intersect(columnsPerTableInSchema, StringComparer.InvariantCultureIgnoreCase); foreach (var column in validColumnDifferences) { result.ValidColumns.Add(column); } var invalidColumnDifferences = columnsPerTableInDatabase.Except(columnsPerTableInSchema, StringComparer.InvariantCultureIgnoreCase) .Union(columnsPerTableInSchema.Except(columnsPerTableInDatabase, StringComparer.InvariantCultureIgnoreCase)); foreach (var column in invalidColumnDifferences) { result.Errors.Add(new Tuple <string, string>("Column", column)); } }