Я заканчиваю проект. До сих пор я использовал drop-create, но хочу сохранить базу данных нетронутой.
У меня есть инициализатор данных, который содержит sureDeleted и sureCreated, прежде чем вставлять данные в базу данных.
Я хотел бы поместить некоторые стандартные данные в базу данных, но я не уверен, что удаление sureDeleted является правильным способом. Я использую EF Core, но большинство найденных ответов используют EF6.
Я использую EF Core, но большинство найденных ответов используют EF6.
Я не могу понять, есть ли в EF Core «правильный» способ проверки, содержит ли уже набор данных.
Контекст БД
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Person> Persons { get; set; }
public DbSet<Location> Locations { get; set; }
public DbSet<Grade> Grades { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ApplyConfiguration(new PersonConfiguration());
builder.ApplyConfiguration(new LocationConfiguration());
builder.ApplyConfiguration(new GradeConfiguration());
}
Инициализатор данных
public class DataInitializer
{
private readonly ApplicationDbContext _dbContext;
private readonly UserManager<IdentityUser> _userManager;
public DataInitializer(ApplicationDbContext dbContext, UserManager<IdentityUser> userManager)
{
_dbContext = dbContext;
_userManager = userManager;
}
public async Task InitializeData()
{
_dbContext.Database.EnsureDeleted();
if (_dbContext.Database.EnsureCreated())
{
await InitializeUsers();
Location leuven1 = new Location {Address = "Steenweg 2", City = "Leuven", PostalCode = "3000"};
Location oudenaarde1 = new Location {Address = "Oude Baan 26", City = "Oudenaarde", PostalCode = "9700"};
Locatie leuven2 = new Locatie {Adres = "Kerkplein 89A", Stad = "Leuven", Postcode = "3000"};
_dbContext.Locations.Add(leuven);
_dbContext.Locations.Add(oudenaarde);
_dbContext.SaveChanges();
Grade grade3 = new Grade("3");
_dbContext.Grades.Add(grade3);
_dbContext.SaveChanges();
Member person =
new Member("Cedric", "De Wit", 'o', "26-05-1998", grade3, oudenaarde1, "CedricDeWit@telenet.be",
"052406893", "Cedric_123", "980526-47315") {BackupTelefoon = "0475050321"}
Admin person2 = new Admin("Jasper", "De Grote", 'm', "01-03-1997", leuven,
"jasper.degrote@hotmail.com", "+32470521613", "Testen@1997", "970301-34336");
_dbContext.Persons.Add(person)
_dbContext.Persons.Add(person2);
_dbContext.SaveChanges();
}
}
private async Task InitializeUsers()
{
string email = "jasper.degrote@hotmail.com";
IdentityUser user = new IdentityUser {UserName = email, Email = email};
await _userManager.CreateAsync(user, "Testen@1997");
await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, "admin"));
email = "CedricDeWit@telenet.be";
user = new IdentityUser {UserName = email, Email = email};
await _userManager.CreateAsync(user, "Cedric_123");
await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, "member"));
}
}
Короче говоря: Я хотел бы заполнить базу данных данными выше, но если база данных уже содержит данные, она ничего не должна делать.