update database on seeding in ASP MVC .net 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
* Seed File [0/7]
- [ ] Create Seed Project
- mkdir Seeder; cd Seeder; dotnet new console;
- [ ] Manage Dependencies
- Create Contexts
- 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
private static IList<ClassNameToBeSeeded> SeedData()
{
IList<ClassNameToBeSeeded> pages = new List<ClassNameToBeSeeded>();
pages.Add(new ClassNameToBeSeeded
{
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)
{
classNameSeeder.SeedToDB();
}
}
}
- [ ] Make sure your tables are created with migrations and run the program via
dotnet run
dotnet ef database update 0 --context <context>
dotnet ef database update --context <context>