Database Seeding Framework - C#


This article presents a means of implementing


(1) Console Application Code

static void Main(string[] args)

(2) Write Seed Version classes

These should follow a naming convention "Seed_YYYYMMDD_hhmm", which will cause them to be executed in the order in which they were created.

Re-usable Code

public abstract class SeedBase
    public abstract void Execute();

public class SeedEngine
    public static void ApplyVersionedUpdates()
        // TODO: Create a SeedVersion table
        var asm = Assembly.GetExecutingAssembly();

        // TODO: Query the most recent seed version run against the database, and filter
        // the next statement for everything newer than that
        var seedVersions = asm.DefinedTypes.Where(a => a.BaseType == typeof(SeedBase)).OrderBy(a => a.Name);

        foreach (var seedVer in seedVersions)
            var result = Activator.CreateInstance(seedVer) as SeedBase;

            if (result == null)

            Debug.Print($"Running seed {seedVer.Name}");
            // TODO: Insert a SeedVersion record with the current {seedVer.Name}