Аналог операции context.SaveChanges() в entity framework который не останавливает работу с объектом context?

Я хочу добавить данные в несколько таблиц базы данных. После того, как я добавляю данные в одну таблицу - я пишу context.SaveChanges(). И добавление данных в другие таблицы заканчивается, так как объект context прекращает свою работу с БД.

Пробую другой вариант. Добавляю данные во все таблицы и в конце пишу context.SaveChanges(). В итоге данные вообще не сохраняются ни в одной из таблиц БД. Как решить данную проблему?

Данные я добавляю в классе SampleUserData:

public static class SampleUserData
{
    public static void Initialize(DBContext context)
    {
        if (!context.Users.Any())
        {
            context.Users.AddRange(
                new User("Олег", "Олегов", "[email protected]", "uuurrr"),
                new User("Коля", "Колин", "[email protected]", "rrruuu")
            );

            context.Services.AddRange(
                new Service(1, "Посадка декоративного кустарника",
                "Декоративный кустарник, высаженный на подходящем месте и гармонично вписывающийся в общий дизайн ландшафта – может полностью преобразить территорию, придав ей более элегантный, живописный и законченный вид. Кусты привозятся нашими сотрудниками. В работу включена также подготовка почвы и удобрение земли.",
                false, 1, 350, "минуты", 20),
                new Service(1, "Посадка плодово-ягодного кустарника",
                "Ягодный кустарник крыжовник или сортовая малина отлично подойдут для живой изгороди и порадуют своих владельцев вкусными и сочными ягодами. Смородина придаст очарования любому саду в период созревания ягод. Наиболее выигрышно будут смотреться кусты смородины, если рядом высадить плодовые кустарники с разной окраской плодов – белой, черной, розовой и красной. Кусты привозятся нашими сотрудниками. В работу включена также подготовка почвы и удобрение земли.",
                false, 1, 350, "минуты", 20),
                new Service(3, "Посадка декоративных деревьев",
                "Декоративные деревья, отличаясь друг от друга окраской, формой кроны и орнаментом листвы, наравне с декоративными кустарниками великолепно подчеркивают достоинства ландшафта и являются настоящим украшением для любой территории. Деревья подбираются и привозятся нашими сотрудниками. В работу включена также подготовка почвы и удобрение земли.",
                false, 1, 2500, "минуты", 40),
                new Service(4, "Посадка плодово-ягодных деревьев",
                "Плодово-ягодные деревья – настоящий кладезь витаминов для поддержания отличного здоровья и замечательное украшение сада, радующее красотой цветения и чудесным видом спелых плодов душу и сердце. Деревья подбираются и привозятся нашими сотрудниками. В работу включена также подготовка почвы и удобрение земли.",
                false, 1, 2500, "минуты", 40),
                new Service(5, "Создание ландшафта",
                "Создание ландшафта представляет собой творческий процесс по благоустройству и облагораживанию территории земельного участка с использованием различных компонентов природы. Наши специалисты разработают проект ландшафтного дизайна и осуществят его в самые короткие сроки, используя наиболее подходящие материалы для оформления ландшафта каждой конкретной территории.",
                true, 1000, 13000, "дни", 3),
                new Service(6, "Создание альпийских горок",
                "Горки - одна из самых популярных тенденций ландшафтного дизайна по благоустройству территории земельного участка и украшения его рельефа путем создания альпинария (альпийской горки или альпийской лужайки) или рокария (композиции из камней, хвойных кустарников и различных видов почвопокровных растений). При проведении работ мы используем для укрепления склонов современные методики и лучшие материалы, что позволяет нам создавать альпийские горки разной конструкции, в зависимости от возможностей, вкусов и пожеланий каждого конкретного заказчика.",
                false, 1, 2500, "часы", 1),
                new Service(7, "Создание искусственного водопада",
                "Водопады – величественное явление природы, полюбоваться которым сегодня можно не только в «дикой» природе, но и на собственном земельном участке. Безусловно, речь идет об искусственных водопадах! Выбор и возведение этого величественного сооружения требует соответствующих знаний и навыков, поэтому лучше всего обратиться за помощью к нашим специалистам, которые предложат, спроектируют и создадут наиболее подходящий для Вашей территории вид водопада.",
                false, 1, 18000, "дни", 2),
                new Service(8, "Создание газона",
                "Газон, ровный и безукоризненный, представляет собой важнейший декоративный элемент, являясь истинным украшением для любой территории, гармонично завершающим создание ландшафта. Наши специалисты помогут вам создать именно такой газон. За символическую плату вы получите травянистое покрытие премиального класса.",
                true, 1, 500, "часы", 1),
                new Service(9, "Профессиональная обрезка растительности",
                "Правильная и грамотная обрезка плодовых деревьев и кустарников – залог отличного урожая. Правильная и грамотная обрезка декоративных деревьев и кустарников (включая живые изгороди) – залог ухоженной и аккуратной территории земельного участка. Мы рады предложить Вам качественный уход за растениями Вашего земельного участка по приемлемым ценам.",
                true, 1, 300, "часы", 1),
                new Service(10, "Уборка",
                "Как самый запущенный, так и грамотно организованный и спроектированный профессионалами ландшафт (включая сад, газоны, цветник и т.д.) требует регулярной генеральной уборки. Мы с радостью выполним работы по поддержанию Вашего земельного участка в надлежащем состоянии.",
                true, 100, 4000, "часы", 6)
                );

            context.Executors.AddRange(
                new Executor(1, "Пётр", "Иванов", "[email protected]", "~/wwwroot/img/executor1.jpg",
                "Иванов Пётр это садовник и архитектор садовых участков с многолетним опытом. Пётр отлично справляется с проектированием садовых пространств, умеет прекрасно дополнить существующее садовое пространство. В портфолио у исполнителя имеются различные проекты по созданию садовых простанств в различных городах России."),
                new Executor(2, "Василий", "Мироненко", "[email protected]", "~/wwwroot/img/executor2.jpg",
                "Мироненко Василий отлично выполняет свою работу. Старается придерживаться всех сроков. В работе использует довольно смелые и от этого выигрышные решения. Также Василий имеет образование геолога, что позволяет ему отлично сочетать дизайн с практичностью на любом типе ландшафта."),
                new Executor(3, "Валерий", "Лиско", "[email protected]", "~/wwwroot/img/executor3.jpg",
                "В нашей команде Валерий - человек-практичность. Сочетая передовые европейские технологии по проектированию садового пространства он создаёт довольно практичные решения при относительно бюджетных исходных материалах, от чего выигрывает не только исполнитель, но и заказчик!"),
                new Executor(4, "Георгий", "Спицин", "[email protected]", "~/wwwroot/img/executor4.jpg",
                "Георгий представляет собой новую школу ландшафтной архитектуры, постоянно проходит практики в Германии, Бельгии, Великобритании. Был номинирован на премию ландшафтных дизайнеров \"Золотая липа\". Наверно, это лучше всего описывает его как профессионала!"),
                new Executor(5, "Степан", "Земельной", "[email protected]", "~/wwwroot/img/executor5.jpg",
                "Степан - человек, фантазия которого позволяет придумать неожиданное решение для, казалось бы, абсолютно мрачных пространств. В своей деятельности он сочетает все передовые тенденции скандинавской дизайнерской школы, умело встраивая их в какую-либо территорию")
                );

            context.SaveChangesAsync();
        }
    }
}

Метод Initialize данного класса я вызываю в классе Program (то есть по сути проверяется, пустая ли у меня таблица Users. Если пустая - добавляю данные, если не пустая - ничего не делаю):

public class Program
{
    public static void Main(string[] args)
    {
        var host1 = CreateHostBuilder(args).Build();
        using (var scope = host1.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                var context = services.GetRequiredService<DBContext>();
                SampleUserData.Initialize(context);
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred seeding the DB.");
            }
        }
        host1.Run();

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Ответы (0 шт):