EF Core外键配置问题Code First Problem
EF Core Foreign Key configuration problem Code First Problem
我在应用程序中有 4 table。
User
table(来自 IdentityUser)- UserId
是 PK
- A
Club
table:PK是club_id
.
- A
Team
table 必须属于 Club
。 PK team_id + club_id
.
- Atable
Player
是一个用户(PKUserID
).
- 一个table
Team_Players
必须属于一个团队:PK是team_id + club_id + UserId
.
当我尝试添加迁移时出现以下错误:
The relationship from 'Team_Players.Team' to 'Team' with foreign key properties {'Team_Id' : string} cannot target the primary key {'Team_Id' : string, 'Club_Id' : string} because it is not compatible. Configure a principal key or a set of compatible foreign key properties for this relationship.
非常感谢您的帮助。
这是 类 的代码:
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; }
}
最后我的 OnModelCreating
方法有以下代码:
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});
外键以键为目标,而不仅仅是键的一部分。所以
[ForeignKey("Team_Id")]
public Team Team { get; set; }
应该是
[ForeignKey("Team_Id, Club_Id")]
public Team Team { get; set; }
因为
Entity<Team>().HasKey(e => new { e.Team_Id, e.Club_Id});
我在应用程序中有 4 table。
User
table(来自 IdentityUser)-UserId
是 PK- A
Club
table:PK是club_id
. - A
Team
table 必须属于Club
。 PKteam_id + club_id
. - Atable
Player
是一个用户(PKUserID
). - 一个table
Team_Players
必须属于一个团队:PK是team_id + club_id + UserId
.
当我尝试添加迁移时出现以下错误:
The relationship from 'Team_Players.Team' to 'Team' with foreign key properties {'Team_Id' : string} cannot target the primary key {'Team_Id' : string, 'Club_Id' : string} because it is not compatible. Configure a principal key or a set of compatible foreign key properties for this relationship.
非常感谢您的帮助。
这是 类 的代码:
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; }
}
最后我的 OnModelCreating
方法有以下代码:
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});
外键以键为目标,而不仅仅是键的一部分。所以
[ForeignKey("Team_Id")]
public Team Team { get; set; }
应该是
[ForeignKey("Team_Id, Club_Id")]
public Team Team { get; set; }
因为
Entity<Team>().HasKey(e => new { e.Team_Id, e.Club_Id});