基本数据结构
表设计如下: 入学记录public class AdmissionRecord{ [Key] public long Id { get; set; } public DateTime AdmissionTime { get; set; } public string Remark { get; set; }}
班级
public class Class{ [Key] public long Id { get; set; } public DateTime CreationTime { get; set; } public string ClassName { get; set; } public virtual ListStudents { get; set; }}
学生-教师关系表
public class StudentTeacherRelationship{ [Key] public long Id { get; set; } public long StudentId { get; set; } public virtual Student Student { get; set; } public long TeacherId { get; set; } public virtual Teacher Teacher { get; set; }}
教师
public class Teacher{ [Key] public long Id { get; set; } public string Name { get; set; } public string TeacherId { get; set; } public virtual ListStudentTeacherRelationships { get; set; }}
学生
public class Student{ [Key] public long Id { get; set; } public string StudentId { get; set; } public string Name { get; set; } public long AdmissionRecordId { get; set; } //Student-AdmissionRecord 1:1 [ForeignKey("AdmissionRecordId")] public virtual AdmissionRecord AdmissionRecord { get; set; } public long ClassId { get; set; } public virtual Class Class { get; set; } public virtual ListStudentTeacherRelationships { get; set; }}
一对一
学生-入学记录
public long AdmissionRecordId { get; set; }//Student-AdmissionRecord 1:1[ForeignKey("AdmissionRecordId")]public virtual AdmissionRecord AdmissionRecord { get; set; }
另解
modelBuilder.Entity() .HasOne(p => p.AdmissionRecord) .WithOne(p => p.Student) .HasForeignKey (p => p.AdmissionRecordId);
参考资料:
一对多
学生-班级
modelBuilder.Entity() .HasMany(p => p.Students) .WithOne(p => p.Class) .HasForeignKey(p => p.ClassId) .OnDelete(DeleteBehavior.ClientSetNull);//下面写法也可以//modelBuilder.Entity ()// .HasOne(p => p.Class)// .WithMany(p=>p.Students)// .HasForeignKey(k => k.ClassId)// .OnDelete(DeleteBehavior.ClientSetNull);
多对多
学生-教师
//通过StudentTeacherRelationship中间表,通过实现两个1:n,实现m:nmodelBuilder.Entity() .HasOne(p => p.Student) .WithMany(p => p.StudentTeacherRelationships) .HasForeignKey(k => k.StudentId) .OnDelete(DeleteBehavior.ClientSetNull);modelBuilder.Entity () .HasOne(p => p.Teacher) .WithMany(p => p.StudentTeacherRelationships) .HasForeignKey(k => k.TeacherId) .OnDelete(DeleteBehavior.ClientSetNull);