Dziwny przypadek z bazą danych .NET C#

0

Witajcie,
Wdrażam się w przygotowywanie baz danych do aplikacji, przygotowuję sobie różne projekty. Od dwóch dni usiłuję wymyślić rozwiązanie problemu, który napotkałem, ale nie mam pomysłu co tu może być nie tak. Działam na .NET Core 2.1 i EF 2.1. W pierwszym projekcie mam model League:

public class League
    {
        public int LeagueId { get; set; }
        [MaxLength(50)]
        [Required]
        public string LeagueName { get; set; }
        [Required]
        public string Country { get; set; }

        public List<Team> Teams { get; set; }

    }

oraz powiązany z nim model Team

public class Team
    {
        public int TeamId { get; set; }
        [MaxLength(100)]
        public string TeamName { get; set; }
        public string City { get; set; }
        public string Country { get; set; }

        public List<Player> Players;

        public string LeagueName { get; set; }
        public League League { get; set; }
    }

Tworząc początkowe wypełnienie danymi utworzyłem kilka tworów w League, Playerów robiłem w następujący sposób:

new Team()
                {
                    TeamName = "Roma Club",
                    City = "Rzym",
                    Country = "Włochy",
                    LeagueName = context.Leagues.Find("Serie A").LeagueName
                }

Tutaj wszystko ładnie działa, po odpaleniu i przygotowaniu metod CRUD mogę sobie dodawać kluby do lig itp. W drugim projekcie, mam model Training:

public class Training
    {
        public int TrainingId { get; set; }
        [Required]
        public string TrainingName { get; set; }
        public List<Lesson> Lessons { get; set; }

        public string Owner { get; set; }
        public User User { get; set; }
    }

oraz powiązany z nim model Lesson:

public class Lesson
    {
        public int LessonId { get; set; }
        public string LessonTitle { get; set; }
        public string ContentLesson { get; set; }

        public string TrainingName { get; set; }
        public Training Training { get; set; }
    }

W analogiczny sposób zostały również przypisane dane początkowe:

new Lesson()
                {
                    LessonTitle = "Język C# - wprowadzenie",
                    ContentLesson = "Treść lekcji",
                    TrainingName = context.Trainings.Find("Język C#").TrainingName
                }

Tym razem jednak, reakcja Visualki jest zupełnie inna niż w przypadku pierwszego projektu, mianowicie zgłasza Exception User-Unhandled (System.ArgumentException: 'The key value at position 0 of the call to 'DbSet<Training>.Find' was of type 'string', which does not match the property type of 'int'.').

Ciężko mi wpaść z czego to wynika, tym bardziej że wydaje mi się, że ten kod jest bliźniaczy do wklejonego u góry, który działa. Dodam, że samo utworzenie migracji i utworzenie bazy w obydwu przypadkach przebiega poprawnie, więc wydaje mi się, że nie tam jest problem. Mało tego, jeżeli za TrainingName wpiszę np. "Nazwa" całość przejdzie i się uruchomi, ale nie działają powiązania (nie mogę dodać lekcji do kursu).

1

@kammarkdev, jeśli nie masz w klasie "Team" właściwości "LeagueId", to według konwencji utworzy się kolumna "League_LeagueId", która jest kluczem obcym do tabeli "Leagues" (kolumna "LeagueName" w tym przypadku nie jest żadnym kluczem w żadnej z tabel). Ale gdybyś dodał atrybut [Key] przy właściwości "LeagueName" w klasie "League", to będzie ona kluczem głównym w tej klasie ("LeagueId" już nie będzie żadnym kluczem) i tak samo właściwość "LeagueName" będzie kluczem obcym w klasie "Team".

Nie wiem, czemu w tym pierwszym przypadku zadziałała Ci metoda Find z argumentem typu string, bo powinna zadziałać tylko w tym drugim przypadku, w którym kolumna "LeagueName" jest kluczem głównym. W przypadku klas "Training" i "Lesson" wyjątek jest zwracany prawidłowo.

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