Projede öncelikle tüm işlemleri yapacak bir kullanıcının eklenmesi gerekir. Şimdi bunu gerçekleştirelim. Admin kullanıcısına varsayılan WebAdresi, ResimYolu ve Durum gibi alanları da ekleyelim.
SeedData dosyasını tanımlayalım.
using Microsoft.AspNetCore.Identity;
using SchoolManagement.Models;
namespace SchoolManagement.Data
{
public static class SeedData
{
public static async Task Initialize(IServiceProvider serviceProvider)
{
using (var scope = serviceProvider.CreateScope())
{
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
// Rolleri oluştur
string[] roleNames = { "Admin", "Teacher", "Student" };
foreach (var roleName in roleNames)
{
if (!await roleManager.RoleExistsAsync(roleName))
{
await roleManager.CreateAsync(new IdentityRole(roleName));
}
}
// Eğer hiç kullanıcı yoksa, Admin kullanıcısını oluştur
if (!userManager.Users.Any())
{
await AddUserIfNotExists(userManager, "xxxx", "aaa@bbb.ccc", "yyyy!",
"Admin Kullanıcısı", "aaaaa", "Kullanıcı", "0000", "zzzz");
}
}
}
private static async Task AddUserIfNotExists(UserManager<ApplicationUser> userManager,
string userName, string email, string password, string fullName,
string adi, string soyadi, string numara, string role)
{
var user = await userManager.FindByEmailAsync(email);
if (user == null)
{
user = new ApplicationUser
{
UserName = userName,
Email = email,
EmailConfirmed = true,
FullName = fullName,
Adi = adi,
Soyadi = soyadi,
Numara = numara,
WebAdresi = "http://www.example.com", // Varsayılan web adresi
ResimYolu = "images/default.jpg", // Varsayılan resim
Durum = 1 // Aktif kullanıcı
};
var result = await userManager.CreateAsync(user, password);
if (result.Succeeded)
{
await userManager.AddToRoleAsync(user, role);
}
}
}
}
}
Program.cs içinden bunu çağıralım.
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var context = services.GetRequiredService<ApplicationDbContext>();
// Veritabanında başlangıç verisinin olup olmadığını kontrol edin
if (!context.Users.Any()) // Örneğin kullanıcı tablosu boşsa verileri ekle
{
await SeedData.Initialize(services);
}
}
Bu kod sayesinde ilk çalıştırmada Admin kullanıcısı otomatik olarak oluşturulacak. Eğer veritabanında zaten kullanıcı varsa, işlem tekrarlanmayacak.