Asp.Net: Обеспечить создание или миграцию? - PullRequest
0 голосов
/ 25 марта 2019

Я заканчиваю проект. До сих пор я использовал 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"));
    }
}

Короче говоря: Я хотел бы заполнить базу данных данными выше, но если база данных уже содержит данные, она ничего не должна делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...