Когда я реализую отношение «многие ко многим» между двумя классами и настраиваю его составной первичный ключ, используя свободный API, тогда вместо создания 2 столбцов в базе данных EF Core создает три столбца.
UserReport.cs
public class UserReports
{
public int ReporterId { get; set; }
public User Reporter { get; set; }
public int ReporteeId { get; set; }
public User Reportee { get; set; }
}
User.cs
public class User: IdentityUser<int>
{
public DateTime DateOfBirth { get; set; }
public string KnownAs { get; set; }
public DateTime Created { get; set; }
public DateTime LastActive { get; set; }
public ICollection<UserReports> Reporters { get; set; } = new Collection<UserReports>();
public ICollection<UserReports> Reportees { get; set; } = new Collection<UserReports>();
}
ApplicatiobDbContext.cs
modelBuilder.Entity<UserReports>()
.HasKey(ru => new { ru.ReporterId, ru.ReporteeId});
modelBuilder.Entity<UserReports>()
.HasOne(ru => ru.Reportee)
.WithMany(u => u.Reporters)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<UserReports>()
.HasOne(ru => ru.Reporter)
.WithMany(u => u.Reportees)
.OnDelete(DeleteBehavior.Restrict);
Миграция
После добавления миграций ядро EF генерирует этот тип миграции, который создает дополнительные столбцы
ReporterId1 = table.Column<int>(nullable: true)
migrationBuilder.CreateTable(
name: "ReportUsers",
columns: table => new
{
ReporterId = table.Column<int>(nullable: false),
ReporteeId = table.Column<int>(nullable: false),
ReporterId1 = table.Column<int>(nullable: true),
Message = table.Column<string>(nullable: false)
},