CreateDatabaseIfNotExists: standart sifatida ishlatiladigan initializator. Ma’lumotlar bazasini va ma’lumotlarini avtomatik ravishda o‘chirmaydi, lekin modellar tuzilishi va ma’lumotlar kontekstida o‘zgarish yuz berganda, istisno chiqariladi.
DropCreateDatabaseIfModelChanges: ushbu initializator ma’lumotlar bazasidagi jadvallarni aniqlangan modellarga muvofiqligini tekshiradi. Agar modellar jadvallarning ta’rifiga mos kelmasa, ma’lumotlar bazasi qayta tuziladi.
DropCreateDatabaseAlways: ushbu initializator har doim ma’lumotlar bazasini qayta tashkil qiladi.
Biz initializatorlardan birini ishlatamiz. Buning uchun Seed metodini qayta aniqlashimiz kerak:
class MyContextInitializer : DropCreateDatabaseAlways {
protected override void Seed(MobileContext db)
{
Phone p1 = new Phone {Name = "Samsung Galaxy S5", Price = 14000 };
Phone p2 = new Phone {Name = "Nokia Lumia 630", Price = 8000 };
db.Phones.Add(p1);
db.Phones.Add(p2);
db.SaveChanges();
}
}
public class Phone
{
public int Id { get; set; }
public string Name { get; set; }
public int Price { get; set; }
}
class MobileContext : DbContext
{
static MobileContext()
{
Database.SetInitializer(new MyContextInitializer());
}
public MobileContext() : base("DefaultConnection")
{ }
public DbSet
Phones { get; set; }
}
Aslida, tashabbuskor yuqorida ko‘rib chiqilgan sinflardan birida meros bo‘lib o‘tadi va konteks klassi tomonidan yoziladi: DropCreateDatabaseAlways.
Barcha boshlang‘ich harakatlar Seed metodida amalga oshiriladi va ishga tushirishning o‘zi ma’lumotlar kontekstidan foydalanib ma’lumotlar bazasida oddiy ma’lumotlarni saqlashni o‘z ichiga oladi.
Initializator ishlashi uchun uni chaqirish kerak. Initializatorni chaqirishning bir usulida uni konteks sinfining statik konstruktorida chaqirishni nazarda tutadi: