EntityFrameworkCore 一对一 && 一对多 && 多对多配置

it2022-06-26  84

基本数据结构

表设计如下: 入学记录

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 List<Student> Students { 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 List<StudentTeacherRelationship> StudentTeacherRelationships { 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 List<StudentTeacherRelationship> StudentTeacherRelationships { get; set; } }

一对一

学生-入学记录

public long AdmissionRecordId { get; set; } //Student-AdmissionRecord 1:1 [ForeignKey("AdmissionRecordId")] public virtual AdmissionRecord AdmissionRecord { get; set; }

另解

modelBuilder.Entity<Student>() .HasOne(p => p.AdmissionRecord) .WithOne(p => p.Student) .HasForeignKey<Student>(p => p.AdmissionRecordId);

参考资料:https://www.learnentityframeworkcore.com/configuration/one-to-one-relationship-configuration

一对多

学生-班级

modelBuilder.Entity<Class>() .HasMany(p => p.Students) .WithOne(p => p.Class) .HasForeignKey(p => p.ClassId) .OnDelete(DeleteBehavior.ClientSetNull); //下面写法也可以 //modelBuilder.Entity<Student>() // .HasOne(p => p.Class) // .WithMany(p=>p.Students) // .HasForeignKey(k => k.ClassId) // .OnDelete(DeleteBehavior.ClientSetNull);

多对多

学生-教师

//通过StudentTeacherRelationship中间表,通过实现两个1:n,实现m:n modelBuilder.Entity<StudentTeacherRelationship>() .HasOne(p => p.Student) .WithMany(p => p.StudentTeacherRelationships) .HasForeignKey(k => k.StudentId) .OnDelete(DeleteBehavior.ClientSetNull); modelBuilder.Entity<StudentTeacherRelationship>() .HasOne(p => p.Teacher) .WithMany(p => p.StudentTeacherRelationships) .HasForeignKey(k => k.TeacherId) .OnDelete(DeleteBehavior.ClientSetNull);

示例代码

https://github.com/zLulus/NotePractice/blob/dev3/Website/DotNetCore/CoreWebsite.EntityFramework/WebsiteDbContext.cs

转载于:https://www.cnblogs.com/Lulus/p/9497874.html


最新回复(0)