Я пытаюсь настроить многие ко многим с дополнительными свойствами в EF Core 2.2.После прочтения мне кажется, что я должен сделать свой стол для общения первоклассным гражданином.Я сделал это, но генерируемая им схема не совсем верна.Он добавляет нежелательное теневое свойство с именем «UserId1».
Вот модель домена:
User.cs
public class User : IdentityUser<long> {
public string FirstName { get; set; }
public string LastName { get; set; }
public IList<UserJobRecommendations> RecommendedJobs { get; protected set;
}
Job.cs
public class Job : BaseEntity<Job> {
public long Id { get; protected set; }
public string Name {get ; protected set;}
public IList<UserJobRecommendations> RecommendedTo { get; protected set; }
}
UserJobRecommendations.cs
public class UserJobRecommendations {
public Job Job { get; protected set; }
public long JobId { get; protected set; }
public User User { get; protected set; }
public long UserId { get; protected set; }
public long RecommendedById { get; protected set; }
public User RecommendedBy { get; protected set; }
}
Наконец, вот мой контекст:
public class MyContext : IdentityDbContext<User, IdentityRole<long>, long> {
public DbSet<Job> Jobs { get; set; }
public DbSet<UserJobRecommendations> UserJobRecommendations { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity<UserJobRecommendations>().HasKey(k => new { k.UserId, k.JobId });
modelBuilder.Entity<UserJobRecommendations>().HasOne(x => x.User).WithMany(x=>x.RecommendedJobs);
modelBuilder.Entity<UserJobRecommendations>().HasOne(x => x.RecommendedBy);
modelBuilder.Entity<User>().HasMany(x => x.RecommendedJobs);
modelBuilder.Entity<Job>().HasMany(x => x.RecommendedTo);
modelBuilder.Seed();
base.OnModelCreating(modelBuilder);
}
Вот пример схемы, которую он создает для этого.Я не хочу userId1
собственность.Таблица должна иметь 3 свойства.JobId
, UserId
, RecommendedById
.
migrationBuilder.CreateTable(
name: "UserJobRecommendations",
columns: table => new
{
JobId = table.Column<long>(nullable: false),
UserId = table.Column<long>(nullable: false),
UserId1 = table.Column<long>(nullable: true),
RecommendedById = table.Column<long>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_UserJobRecommendations", x => new { x.UserId, x.JobId });
table.ForeignKey(
name: "FK_UserJobRecommendations_Jobs_JobId",
column: x => x.JobId,
principalTable: "Jobs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_UserJobRecommendations_AspNetUsers_RecommendedById",
column: x => x.RecommendedById,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_UserJobRecommendations_AspNetUsers_UserId1",
column: x => x.UserId1,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});