【发布时间】:2022-01-01 06:28:51
【问题描述】:
我在应用中有 4 个表格。
-
User表(来自 IdentityUser)-UserId是 PK -
Club表:PK 为club_id。 - 必须属于
Club的Team表。 PK 为team_id + club_id。 - 作为用户的表
Player(PKUserID)。 - 必须属于一个团队的表
Team_Players:PK 为team_id + club_id + UserId。
当我尝试添加迁移时,我收到以下错误:
具有外键属性 {'Team_Id' : string} 的从 'Team_Players.Team' 到 'Team' 的关系不能以主键 {'Team_Id' : string, 'Club_Id' : string} 为目标,因为它不兼容。为此关系配置一个主键或一组兼容的外键属性。
非常感谢您的帮助。
这是类的代码:
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});
【问题讨论】:
标签: entity-framework ef-code-first