Итак, у меня есть первая база данных Entity Framework Core и приложение .Net Core.
Я хочу добавить данные семян при создании базы данных. Я знаю, что у FluentAPI есть метод HasData, но это не то, что я ищу.
Когда база данных будет создана, я хочу создать пользователя со случайно сгенерированным паролем (который будет отличаться каждый раз), который будет сохранен в файле на сервере.
Я не могу использовать метод HasData, потому что тогда он будет каждый раз создавать один и тот же пароль.
Поэтому мой вопрос: есть ли способ, кроме метода HasData, добавить данные Seed в базу данных Entity Framework Core Code First?
Да! Есть выход! Вы можете сделать следующее:
public static class DatabaseInitializer
{
public static void Initialize(YourDbContext dbContext)
{
dbContext.Database.EnsureCreated();
if (!dbContext.Users.Any())
{
// Write you necessary to code here to insert the User to database and save the the information to file.
}
}
}
Метод Configure
класса Startup
выглядит следующим образом:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, YourDbContext dbContext)
{
// other configurations
..............
DatabaseInitializer.Initialize(dbContext);
..............
// other configurations
}
Метод Initialize
будет вызываться только один раз при запуске приложения.
Создайте класс DataSeeder и вставьте в него DbContext. Напишите метод seedData для вставки необходимых данных. Это будет пользовательская логика.
Вы можете запустить этот код после создания базы данных.
public class DataSeeder
{
public static void SeedRandomPassword(YourDbContext context)
{
//// your custom logic to generate random password
//// set it to right user
context.Users.Add(); // Or Update depending on what you need
context.SaveChanges();
}
}
}