Niedzialajaca metoda Seed / .Net Core 2.2 MVC

0

Siema,
powie mi ktos moze czemu program nie wchodzi mi wgl w metode Seed ? Obstawilem calego Maina break pointami i program tam wgl nie wchodzi i nie rozumiem kompletnie czemu bo nie robilem zadnych dziwnych rzeczy. Jedynie usunalem pare razy DB ale dodawalem pozniej migracje i update i bazy sa dodane ale puste.

Metoda Seed ma za zadanie zainicjalizowanie danych w DB, gdy nie ma w niej zadnych elementow no i fizycznie jest pusta a mimo to metoda nie dziala.

Czyli skrotowo mowiac mam pusta db i chcialbym to jakos zmienic

    public class Program
    {

        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();

            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService<AppDbContext>();
                    context.Database.Migrate();
                    DbInitializer.Seed(context);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
    public static class DbInitializer
    {
        public static void Seed(AppDbContext context)
        {
            if (!context.Cars.Any())
            {
                context.AddRange(
                    new Car {Make = "BMW", Model = "M3", YearOfProduction = 2018, Mileage = "1 000 km", Engine = "4 900 cm3", Fuel = "benzyna", HorsePower = "421 KM", Description = "Mam do sprzedania BMW M3", Price = 160000M, PhotoUrl = "/images/.bmwM3.jpg", MiniPhotoUrl = "/images/bmwM3.jpg"},
                    new Car {Make = "Audi", Model = "S5", YearOfProduction = 2013, Mileage = "112 000 km", Engine = "3 000 cm3", Fuel = "benzyna", HorsePower = "280 KM", Description = "Do sprzedania Audi S5 z 2013 roku. Jestem właścicielem tego samochodu od ponad dwóch lat.", Price = 115000M, PhotoUrl = "/images/audiS5.jpg", MiniPhotoUrl = "/images/audiS5.jpg"},
                    new Car {Make = "BMW", Model = "X4", YearOfProduction = 2017, Mileage = "4 300 km", Engine = "1 995 cm3", Fuel = "benzyna", HorsePower = "190 KM", Description = "BMV X4 20d xDrive. Samochód krajowy. Samochód serwisowany. Wystawiamy fakturę VAT 23%. Samochód bezwypadkowy. I właściciel.", Price = 194000M, PhotoUrl = "/images/bmvx4.jpg", MiniPhotoUrl = "/images/bmvx4.jpg"},
                    new Car {Make = "Chevrolet", Model = "Corvette", YearOfProduction = 1972, Mileage = "28 000 km", Engine = "5 700 cm3", Fuel = "benzyna", HorsePower = "300 KM", Description = "Corvetta jest w świetnym stanie wizualnym i mechanicznym. Oczywiście jest ZAREJESTROWANA i ubezpieczona w PL.", Price = 90000M, PhotoUrl = "/images/chevroletCorvete.jpg", MiniPhotoUrl = "/images/chevroletCorvete.jpg"},
                    new Car {Make = "Nissan", Model = "Skyline", YearOfProduction = 1995, Mileage = "144 000 km", Engine = "2 500 cm3", Fuel = "benzyna", HorsePower = "410 KM", Description = "Na sprzedaż trafia moja perełka Nissan Skyline R33.Auto z Japonii sprowadzone do Szwecji, gdzie było przez wiele lat modyfikowane, uczestniczyło w zlotach, zdobywało nagrody, samochód sponsorowany latami przez Sonax Sweden.", Price = 120000M, PhotoUrl = "/images/nissan.jpg", MiniPhotoUrl = "/images/nissan.jpg"},
                    new Car {Make = "Jaguar", Model = "ZX", YearOfProduction = 2006, Mileage = "78000 km", Engine = "5 000 cm3", Fuel = "benzyna", HorsePower = "510 KM", Description = "Przedstawiam Państwu wyjątkowe auto jakim jest Jaguar XKR, a zwłaszcza ten egzemplarz. Jaguar XKR to ikona światowej i brytyjskiem motoryzacji, a przede wszystkim kontynuator legendarnego już Jaguara E-typa, przez wielu uważany za najpiękniejsze auto w historii motoryzacji.", Price = 200000M, PhotoUrl = "/images/jaguar.jpg", MiniPhotoUrl = "/images/jaguar.jpg"}
                    );
            }

            context.SaveChanges();
        }
    }
0

A kończy się Migrate? Dostajesz wyjątek? Łapiesz wszystkie wyjątki (nie tylko te domyślne)? Miałeś breakpoint w Seed? Lecą jakieś zapytania do bazy?

0

Konczy sie migrate i nie wyrzuca zadnych bledow. Laduje mi sie normalnie stronka i wszystko dziala tylko nie ma na niej aut wgl.W calym Main() dalem breakpoint i nigdzie sie nie zatrzymalo tylko strona wlaczyla sie jak gdyby nigdy nic. Czy jakies zapytania leca to nwm bo nwm jak to sprawdzic.

0

No dobrze, a dałeś breakpoint w Seed? Po czym wnioskujesz, że Seed się nie wykonuje?

Zapytania możesz zobaczyć profilerem, szczegóły zależą od silnika bazy danych.

0

Postawilem dokladnie tu:

  • w 17 linijce w Main()
  • w linijce 4 i 5 juz w Seed()

Wnioskuje po tym ze mam baze dalej pusta a pare commitow wczesniej dzialo to wypelnienie za pomoca Seed()

1
            CreateWebHostBuilder(args).Build().Run();

            var host = CreateWebHostBuilder(args).Build();

A tu o co chodzi? :)

1

Ale po tej linijce

CreateWebHostBuilder(args).Build().Run();

Program dalej nie idzie bo tylko jest uruchamiana startup. Inaczej zaraz wszystko by się wyłączyło. A ty masz w Mainie pomieszane .net core 1 z 2.0

Ja na twoim miejscu napisałbym skrypt sql dodający dane do bazy. I wykonał go np w management studio. A jak chcesz mieć taką możliwość z poziomu programu to ten skrypt zapisujesz w pliku sql i podpinasz do migracji. A najlepiej jest zrobić jak pokazują https://docs.microsoft.com/pl-pl/ef/core/modeling/data-seeding. Czyli HasData. Ale to działa chyba tylko na pierwszej migracji.

Ja na końcu migracji dodawałem taki wpis:

var path = Path.Combine(AppContext.BaseDirectory, @"SQL\plik_ze_skrypt.sql");
            migrationBuilder.Sql(File.ReadAllText(path));

Ale tylko dlatego, że przy dużym insercie metoda HasData ze strony microsoftu nie zadziała.

0

Dziękuje wszystkim za pomoc, problem faktycznie lezal w CreateWebHostBuilder(args).Build().Run();. Nwm szczerze mowiac skad sie wziela ta linijka, wydaje mi sie ze zostala sama wygenerowana ale tak czy owak miala byc ona zakomentowana a zamiast niej mialo byc host.Run() znajdujacae sie pod using w klasie Program.cs.

1 użytkowników online, w tym zalogowanych: 0, gości: 1