ef seed data code example

Example 1: seeding in ef6

public class SchoolContext: DbContext 
{
    public SchoolContext(): base("SchoolDB") 
    {
        Database.SetInitializer(new SchoolDBInitializer());
    }
    
    public DbSet<Student> Students { get; set; }
    public DbSet<Standard> Standards { get; set; }
}


public class SchoolDBInitializer : DropCreateDatabaseAlways<SchoolDBContext>
{
    protected override void Seed(SchoolDBContext context)
    {
        IList<Standard> defaultStandards = new List<Standard>();

        defaultStandards.Add(new Standard() { StandardName = "Standard 1", Description = "First Standard" });
        defaultStandards.Add(new Standard() { StandardName = "Standard 2", Description = "Second Standard" });
        defaultStandards.Add(new Standard() { StandardName = "Standard 3", Description = "Third Standard" });

        context.Standards.AddRange(defaultStandards);

        base.Seed(context);
    }
}

Example 2: how to seed data in EF

// This method of seeding is creating another Project alongside your webApi
* Seed File [0/7]
  - [ ] Create Seed Project 
       - mkdir Seeder; cd Seeder; dotnet new console;
  - [ ] Manage Dependencies
       - Add in references to your DbContexts in your Seeder.csproj like

		<ItemGroup>
          <ProjectReference Include="..\path\name.csproj" />
        </ItemGroup>
        
     - Add needed EF packages with dotnet add package <package>
    
  - [ ] Create Seeder Class for <ClassNameToBeSeeded>
       - mkdir Models/
       - nano Models/classNameSeeder.cs

         (or use your ide to manage files)

  - [ ] Add data to be seeded in static methods
      
      //Class or Object to be seeded
      private static IList<ClassNameToBeSeeded> SeedData()
        {
            IList<ClassNameToBeSeeded> pages = new List<ClassNameToBeSeeded>();

            // Creating objects here to pass into the context
    
            pages.Add(new ClassNameToBeSeeded
               {
                // These have to match the unmapped variables in your context
                variable = "something",
               }
            );

            return pages;
        }

  - [ ] Add in call to persist objects through context
  
       public static void SeedToDB()
        {
            var contextOptions = new DbContextOptionsBuilder<ContextName>()
                .UseSqlServer("ConnectionString")
                .Options;

            var context = new ContextName(contextOptions);
            context.Database.EnsureCreated();
            var sections = classNameSeeder.SeedData();
            context.<contextDbSet>.AddRange(sections);
            context.SaveChanges();
        }

  - [ ] Call this in main
  
    namespace Seeder
    {
        class Program
        {
            public static void Main(string[] args)
            {
                //Its static so no need to instantiate
                classNameSeeder.SeedToDB();
            }
        }
    }

   - [ ] Make sure your tables are created with migrations and run the program via
         dotnet run
         
   
 
//Useful methods for database manipulation
  
// reset migration for table
dotnet ef database update 0 --context <context>

//run migration for table creation
dotnet ef database update --context <context>

Tags:

Misc Example