• EF Core中通过Fluent API配置一对多关系


    接上篇博客,继续演示Fluent API配置一对多的关系。

    以班级-学生为例,一个班级有多个学生,一个学生属于一个班级。

    ER图如下:

    同样的,我们需要准备好如上实体类。

    班级类:

    public class Class
    {
        public int ClassId { get; set; }
    
        public string ClassName { get; set; }
    
        public virtual ICollection<Student> Students { get; set; }
    }

    学生类:

    public class Student
    {
        public int StudentId { get; set; }
    
        public string StudentName { get; set; }
    
        public virtual Class Class { get; set; }
    }

    在数据库上下文中添加配置:

    public class MyDbContext : DbContext
    {
        public MyDbContext()
        {
    
        }
    
        public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
    
            //一个班级有多个学生
            modelBuilder.Entity<Class>()
                .HasMany(o => o.Students)
                .WithOne(o => o.Class);
        }
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
            optionsBuilder.UseSqlServer("server=xxx.xxx.xxx.xxx;database=数据库名称;uid=数据库账号;pwd=数据库密码;");
        }
    
        public DbSet<Class> Class { get; set; }
    
        public DbSet<Student> Student { get; set; }
    
    }

    配置好之后就可以直接使用了,比如:

    using (var db = new MyDbContext())
    {
        //通过班级名称找到班级所有学生
        List<Student> students = db.Class.Include(o => o.Students).FirstOrDefault(o => o.ClassName.Equals("一年级1班")).Students.ToList();
    
        //通过学生姓名找到所在班级
        Class @class = db.Student.Include(o => o.Class).FirstOrDefault(o => "王五".Contains(o.StudentName)).Class;
    
        //指定班级下增加一个学生
        db.Student.Add(new Student()
        {
            StudentId = 4,
            StudentName = "赵六",
            Class = db.Class.FirstOrDefault(t => t.ClassName.Equals("一年级2班"))
        });
    
        //提交
        db.SaveChanges();             
    }
  • 相关阅读:
    抽象类与抽象方法
    简单工厂模式
    面向对象的七种基本设计原则
    HashTable集合遍历的三种方法
    继承(父类为虚方法以及子类的重写)
    继承(is与as)
    Chrome OS 更新新版本可让Linux访问USB连接的Android设备
    谷歌对Intel 10nm进度不满
    盖茨对没能做好手机系统对抗苹果表示遗憾
    微软内部封杀 Slack
  • 原文地址:https://www.cnblogs.com/guwei4037/p/16105689.html
Copyright © 2020-2023  润新知