I have very good experience using this structure:
http://code.google.com/p/migratordotnet/
Basically, you create a class for each database change and annotate the class with a timestamp. The final assembly is then applied in order of time stamp.
This means that during development, after each check, it becomes easier to just blindly start the db update process and know that you are in sync with the world.
using Migrator.Framework; using System.Data; namespace DBMigration { [Migration(20080401110402)] public class CreateUserTable_001 : Migration { public void Up() { Database.CreateTable("User", new Column("UserId", DbType.Int32, ColumnProperties.PrimaryKeyWithIdentity), new Column("Username", DbType.AnsiString, 25) ); } public void Down() { Database.RemoveTable("User"); } }
source share