در این بخش به آموزش چگونگی درج رکوردهای پیشفرض درون جداول در هنگام ایجاد دیتابیس با استفاده از روش code first در محیط Asp.net Core2 می پردازیم.
در این آموزش فرض بر این است که ما از قبل مدلهای جدول و context را داریم و قرار بر این است که کلاس Seed را به برنامه اضافه کنیم.
فیلدهای جدول (Movie) در این آموزش شامل Title - ReleaseDate - Genre - Price می باشد. و نام کلاس context در این اموزش MovieContet می باشد.
جهت اضافه نمودن کلاس Seed به برنامه ابتدا یک کلاس به نام SeedData درون پوشه Models ایجاد نمایید.
public class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MovieContext(
serviceProvider.GetRequiredService<DbContextOptions<MovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
با استفاده از دستور if (context.Movie.Any()) در صورتیکه رکوردی درون جدول Movie باشد ادامه اجرای دستورات انجام نخواهد شد.
جهت اجرای متد Initialize ، متد Main درون کلاس Program.cs را بصورت زیر ویرایش کنید.
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<MovieContext>();
// requires using Microsoft.EntityFrameworkCore;
context.Database.Migrate();
// Requires using RazorPagesMovie.Models;
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();