Как обеспечить составной ключ из двух свойств с разными типами данных? EF Core жалуется, что
Отношение между 'GroupUsers.Groups' и 'Group.GroupUsers' со свойствами внешнего ключа {'UserId': string} не может быть нацелено на первичный ключ {'GroupId': int}, поскольку оно не является совместимы. Настройте основной ключ или набор совместимых свойств внешнего ключа для этого отношения.
Мои таблицы имеют отношение многие ко многим с первичными ключами, которые различаются по типам, как показано ниже
public class Group
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int GroupId { get; set; }
[Required]
public string GroupName { get; set; }
public ICollection<GroupUsers> GroupUsers { get; set; }
}
public class User
{
[Key]
public string UserId { get; set; }
public string Email { get; set; }
public ICollection<GroupUsers> GroupUsers { get; set; }
}
public class GroupUsers
{
public string UserId { get; set; }
public int GroupId { get; set; }
[ForeignKey("GroupId")]
public Group Groups { get; set; }
[ForeignKey("UserId")]
public User Users { get; set; }
}
Вот беглая сторона вещей, которые я забыл показать
modelBuilder.Entity<GroupUsers>().HasKey(gu => new { gu.GroupId, gu.UserId});
modelBuilder.Entity<GroupUsers>().HasOne(ub => ub.Users)
.WithMany(x => x.GroupUsers).HasForeignKey(h => h.GroupId)
.OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<GroupUsers>().HasOne(ub => ub.Groups)
.WithMany(x => x.GroupUsers).HasForeignKey(h => h.UserId)
.OnDelete(DeleteBehavior.Cascade);