how to persist data objects 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
- 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
//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>