Database seeding

From English Wikipedia @ Freddythechick

Database seeding is populating a database with an initial set of data. It is common to load seed data such as initial user accounts or dummy data upon initial setup of an application.

Entity Framework

\Migrations\Configuration.cs <syntaxhighlight lang="csharp"> public class ApplicationDatabaseInitializer : DropCreateDatabaseIfModelChanges<DbContext> {

   protected override void Seed(DbContext context)
   {
       var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
       var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
       var username = "Alice";
       var password = "password123";
       var role = "Admin";
       // Create role Admin if it does not exist
       if (!RoleManager.RoleExists(role))
       {
           RoleManager.Create(new IdentityRole(role));
       }
       // Create user Alice
       var user = new ApplicationUser() { UserName = username; };
       var result = UserManager.Create(user, password);
       // Add user Admin to role Admin
       if (result.Succeeded)
       {
           var result = UserManager.AddToRole(user.Id, role);
       }
   }

} </syntaxhighlight>

Entity Framework Core

<syntaxhighlight lang="csharp"> public class DataSeedingContext : DbContext {

   public DbSet<Blog> Blogs { get; set; }
   public DbSet<Post> Posts { get; set; }
   protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
       => optionsBuilder
           .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFDataSeeding;Trusted_Connection=True");
   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Blog>(entity => { entity.Property(e => e.Url).IsRequired(); });
       #region BlogSeed
       modelBuilder.Entity<Blog>().HasData(new Blog { BlogId = 1, Url = "http://sample.com" });
       #endregion
       modelBuilder.Entity<Post>(
           entity =>
           {
               entity.HasOne(d => d.Blog)
                   .WithMany(p => p.Posts)
                   .HasForeignKey("BlogId");
           });
       #region PostSeed
       modelBuilder.Entity<Post>().HasData(
           new Post { BlogId = 1, PostId = 1, Title = "First post", Content = "Test 1" });
       #endregion
       #region AnonymousPostSeed
       modelBuilder.Entity<Post>().HasData(
           new { BlogId = 1, PostId = 2, Title = "Second post", Content = "Test 2" });
       #endregion
       #region OwnedTypeSeed
       modelBuilder.Entity<Post>().OwnsOne(p => p.AuthorName).HasData(
           new { PostId = 1, First = "Andriy", Last = "Svyryd" },
           new { PostId = 2, First = "Diego", Last = "Vega" });
       #endregion
   }

} </syntaxhighlight>

Symfony PHP Framework

AppBundle/DataFixtures/ORM/customer.yml (as in Version 1 of hautelook/AliceBundle )

<syntaxhighlight lang="yaml"> AppBundle\Entity\User:

 customer_{1..10}:
   username: <username()>
   email: <safeEmail()>
   plainPassword: theLetterA
   roles: [ROLE_SUPER_ADMIN]
   enabled: true

</syntaxhighlight>

Laravel PHP Framework

app/database/seeds/users.php <syntaxhighlight lang="php"> class DatabaseSeeder extends Seeder {

   public function run()
   {
       $this->call('UserTableSeeder');
       $this->command->info('User table seeded!');
   }

}

class UserTableSeeder extends Seeder {

   public function run()
   {
       DB::table('users')->delete();
       User::create(array('email' => 'foo@bar.com'));
   }

} </syntaxhighlight>

Command line

MySQL:

mysql -u username -p database_name < file.sql

PostgreSQL:

pg_restore -h hostname -d database_name -U username file.sql

Microsoft SQL Server:

sqlcmd -S server_name\instance_name -i file.sql

External links