因此,我试图创建学生&主管对象之间的多对多关系,但我想明确定义我的StudentSupervisor类,因为我需要在此交汇点类中具有其他属性。在实体框架中为多对多关系禁用隐式创建的联结表
问题是,当我检查迁移文件时,EF会自动/隐式地创建多对多关系的联结表,我不想这样做。
隐式创建的表EF与我自定义的结点类StudentSupervisor具有相同的名称,除了结尾为1。 (StudentSupervisor1)。
我不希望这个StudentSupervisor1被自动创建。删除它不会做任何事情,因为在每次添加迁移时,都会再次创建。
在此先感谢。
编辑:
public class Supervisor
{
public int Id { get; set; }
public string Name { get; set; }
public int FacultyId { get; set; }
public Faculty Faculty { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
public class Student
{
public int Id { get; set; }
public string MatricNo { get; set; }
public string Name { get; set; }
public virtual ICollection<Supervisor> Supervisors { get; set; }
}
public class SupervisorStudents
{
[Key, Column(Order = 0)]
public int SupervisorId { get; set; }
public Supervisor Supervisor { get; set; }
[Key, Column(Order = 1)]
public int StudentId { get; set; }
public Student Student { get; set; }
public string TagMainOrCo { get; set; }
}
,并在我的DbContext我用流利的API覆盖它们。
modelBuilder
.Entity<Student>()
.HasKey(s => s.Id);
modelBuilder
.Entity<Supervisor>()
.HasKey(p => p.Id);
modelBuilder
.Entity<SupervisorStudents>()
.HasKey(a =>
new
{
a.StudentId, a.SupervisorId
}
);
base.OnModelCreating(modelBuilder);
但你可以在我有我的SupervisorStudents表中创建的迁移文件中看到,有另一个SupervisorStudents1(这是隐含EF创建)
CreateTable(
"dbo.SupervisorStudents",
c => new
{
SupervisorId = c.Int(nullable: false),
StudentId = c.Int(nullable: false),
TagMainOrCo = c.String(),
})
.PrimaryKey(t => new { t.SupervisorId, t.StudentId })
.ForeignKey("dbo.Students", t => t.StudentId, cascadeDelete: true)
.ForeignKey("dbo.Supervisors", t => t.SupervisorId, cascadeDelete: true)
.Index(t => t.SupervisorId)
.Index(t => t.StudentId);
CreateTable(
"dbo.SupervisorStudents1",
c => new
{
Supervisor_Id = c.Int(nullable: false),
Student_Id = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.Supervisor_Id, t.Student_Id })
.ForeignKey("dbo.Supervisors", t => t.Supervisor_Id, cascadeDelete: true)
.ForeignKey("dbo.Students", t => t.Student_Id, cascadeDelete: true)
.Index(t => t.Supervisor_Id)
.Index(t => t.Student_Id);
您需要发布实体类的代码。没有看到你目前在做什么,我们无法帮助你。 –
我已经编辑了代码。谢谢。请帮忙。 – StudyProgramming