EF Core Cizí Klíč konfigurace problém Kód První Problém

0

Otázka

Mám 4 tabulky v aplikaci.

  • User tabulka (z IdentityUser) - UserId je PK
  • A Club tabulka: PK je club_id.
  • A Team tabulka, která musí patřit do Club. PK je team_id + club_id.
  • Tabulka Player který je uživatel (PK UserID).
  • Tabulka Team_Players které musí patřit do týmu: PK je team_id + club_id + UserId.

Když se snažím přidat migrace jsem se následující chybová zpráva:

Vztah z 'Team_Players.Tým " na "Team' s je cizí klíč vlastnosti {'Team_Id' : string} nemůže cílové primární klíč {'Team_Id' : string, 'Club_Id' : string}, protože to není kompatibilní. Konfigurovat hlavní klíč nebo sada kompatibilní cizí klíč vlastnosti na tento vztah.

Děkuji moc předem za pomoc.

Zde je kód pro třídy:

public class Club : BaseModel
{
        [Display(Name = "ID")]
        [Required]
        [Key]
        public string Club_id { get; set; }
}

public class Team : BaseModel
{
        [Display(Name = "ID")]
        [Required]
        public string Team_Id { get; set; }

        [ForeignKey("Club_Id")]
        public Club Club { get; set; }

        [Required]
        [Display(Name = "Club")]
        [MaxLength(50, ErrorMessage = "Field cannot be more than 50 Characters")]
        public string Club_Id  { get; set; }
}    

public class Player : BaseModel
{
        [Required]
        [Display(Name = "ID")]
        public string UserId { get; set; }
     
        [ForeignKey("Club_Id")]
        public Team Club { get; set; }

        [Required]
        [Display(Name = "Club ID")]
        [MaxLength(50, ErrorMessage = "Field cannot be more than 50 Characters")]
        public string Club_Id { get; set; }
}

public class Team_Players:BaseModel
{
        [Required]
        [Display(Name = "ID")]
        public string UserId { get; set; }

        [ForeignKey("Club_Id")]
        public Club Club { get; set; }

        [Display(Name = "Club ID")]
        [MaxLength(50, ErrorMessage = "Field cannot be more than 50 Characters")]
        public string Club_Id { get; set; }

        [ForeignKey("Team_Id")]
        public Team Team { get; set; }
        [Display(Name = "Team ID")]
        public string Team_Id { get; set; }
}

A konečně můj OnModelCreating metoda má následující kód:

modelBuilder.Entity<Team>()
                .HasKey(e => new { e.Team_Id, e.Club_Id});

modelBuilder.Entity<Coach>()
                .HasKey(e => new { e.UserId, e.Club_Id });

modelBuilder.Entity<Player>()
               .HasKey(e => new { e.UserId, e.Club_Id });

modelBuilder.Entity<Team_Players>()
               .HasKey(e => new { e.UserId, e.Club_Id ,e.Team_Id});
ef-code-first entity-framework
2021-11-22 16:47:37
1

Nejlepší odpověď

0

Cizí Klíč se zaměřuje na Klíč, ne jen část Klíče. Tak

[ForeignKey("Team_Id")]
public Team Team { get; set; }

by měla být

[ForeignKey("Team_Id, Club_Id")]
public Team Team { get; set; }

od

Entity<Team>().HasKey(e => new { e.Team_Id, e.Club_Id});
2021-11-22 17:01:20

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................