Метод Seed не обновляет базу данных второй раз после ее редактирования. Что делать? - PullRequest
0 голосов
/ 20 января 2019

Я создаю веб-приложение, используя ASP.Net Core 2.1 MVC. Чтобы добавить исходные данные в некоторые таблицы (например, для категорий), я написал метод Seed, успешно добавил миграцию и обновил базу данных (без ошибок). Данные (со всеми добавленными значениями) были замечены в базе данных (SQL Server) после запуска приложения. Затем я добавил некоторые другие категории в метод семени. На этот раз я не увидел изменений (обновлений) в SQL-сервере после запуска приложения и обновления базы данных с помощью миграции. Seed работает только в первый раз, или я могу каким-то образом обновить (увеличить исходные данные) базу данных, используя Seed? Это мой метод семян:

 public static void Seed(OfferDbContext offerDbContext)
    {
        if (!offerDbContext.Categories.Any())
        {
            Category avto = new Category()
            {
                Name = "Avto"
            };

            Category home = new Category()
            {
                Name = "Ev"
            };

            Category digital = new Category()
            {
                Name = "Digital"
            };

            Category household = new Category()
            {
                Name = "Məişət"
            };

            Category entertainment = new Category()
            {
                Name = "Əyləncə"
            };

            Category furniture = new Category()
            {
                Name = "Mebel"
            };

            Category clothes = new Category()
            {
                Name = "Geyim"
            };

            Category cafe = new Category()
            {
                Name = "Kafe"
            };

            Category food = new Category()
            {
                Name = "Qida"
            };

            Category edu = new Category()
            {
                Name = "Təhsil"
            };

            Category medical = new Category()
            {
                Name = "Tibb"
            };

            Category tourism = new Category()
            {
                Name = "turizm"
            };

            offerDbContext.Categories.AddRange(avto, home, digital, household, entertainment, furniture, clothes, cafe, food, edu, medical, tourism);
            offerDbContext.SaveChanges(); 
        }
    }

И метод Main в Program.cs, где я называю это Seed:

public static void Main(string[] args)
    {
        IWebHost webHost = CreateWebHostBuilder(args).Build();

        using (IServiceScope serviceScope = webHost.Services.CreateScope())
        {
            using(OfferDbContext offerDbContext = serviceScope.ServiceProvider.GetRequiredService<OfferDbContext>())
            {           
                OfferDb.Seed(offerDbContext);
            }
        }

        webHost.Run();
    }

1 Ответ

0 голосов
/ 21 января 2019

Я бы подумал, что проблема в следующей строке

if (!offerDbContext.Categories.Any())

По сути, это говорит, что если нет категорий, тогда делайте добавления, больше нет, поэтому, если там уже есть категории, это будет делатьничего.

Так что, возможно, добавьте еще, и, если уже есть категории, просто добавьте новые,

ИЛИ

Потенциально вы можете обернуть каждое из созданий в ifчтобы увидеть, если он уже существует и если нет, то создайте его.

...