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


    基本数据结构

    default
    表设计如下:
    入学记录

    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);
    

    参考资料:
    Configuring One To One Relationships In Entity Framework Core

    一对多

    学生-班级

    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);
    

    示例代码

    示例代码

  • 相关阅读:
    JDBC连接MySQL数据库及演示样例
    Devstack: A copy of worked local.conf I&#39;m sharing with you.
    jQuery Easy UI Droppable(放置)组件
    指针
    “cvSnakeImage”: 找不到标识符
    按键控制电机显示速度
    验证(Verification)与确认(Validation)的差别
    转换流--OutputStreamWriter类与InputStreamReader类
    特征选择方法之信息增益
    Angular和jQuery的ajax请求的差别
  • 原文地址:https://www.cnblogs.com/Lulus/p/9497874.html
Copyright © 2020-2023  润新知