EF 下的code fist 模式编程

Posted Simple Programmer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF 下的code fist 模式编程相关的知识,希望对你有一定的参考价值。

EF 分两种模式 codefirst(就是不知道数据是啥,也没有数据库)  和 database fist (数据已经设计好了)

首先打开vs  新建一个项目 创建一个控制台程序

然后 新建一个Teacher 类 

    public class Teacher
    {
        public int TeacherId { get; set; }
        public string Name { get; set; }
        public string Country { get; set; }
        public string Description { get; set; }
        public List<Student> Students { get; set; }//一个老师有多个学生,同下说明
        //一个老师有多个教程,这里EF会自动设置外键到对应的Course 表 
        //注意course这个表要写 public Teacher Teacher { get; set; } 这样才能对应
        public List<Course> Courses { get; set; }
    }

然后新建一个Student类  这里Teacher类和 Student 是1:M的关系(一对多)

  public class Student
    {
        public int StudentId { get; set; }
        public string Name { get; set; }
        public string Owner { get; set; }
        public Teacher Teacher { get; set; }//一个学生对应一个老师(这里也可以多个老师)可以自己写

        public IList<Course> Courses { get; set; }//一个学生多门课
    }

同时新建一个Course  课程类 这里 每个学生,每个老师都有自己的课

 public  class Course
    {
        public int CourseId { get; set; }
        public string Name { get; set; }
        public Student Student { get; set; }
        public Teacher Teacher { get; set; }
    }

等表建好了以后我们要进行往数据库插入数据了,这里需要EF的实体DefaultContext 需要继承  DbContext 这个父类

对应的表写在下面

    class DefaultContext : DbContext
    {
        public DbSet<Teacher> Teachers { get; set; }
        public DbSet<Student> Students { get; set; }
        public DbSet<Course> Courses { get; set; }
        
    }

 

现在万事具备之前实现,现在我们在Program.cs中实现如下代码

 for (int i = 11; i < 21; i++)
            {
                var d = DateTime.Now.Date.ToString("yyyyMM");
                var destination = new Teacher
                {
                    Country = "Indonesia" + i.ToString(),
                    Description = "EcoTourism at its best in exquisite Bali",
                    Name = "Bali"
                };
                var student = new Student
                {
                    Name = "Indonesia" + i.ToString(),
                    Teacher = destination
                };
                var couse = new Course
                {
                    Name = "Indonesia" + i.ToString(),
                    Student = student,
                    Teacher = destination
                };
                using (var context = new DefaultContext())
                {
                    context.Teachers.Add(destination);
                    context.Students.Add(student);
                    context.Courses.Add(couse);
                    context.SaveChanges();
                }
            }

此刻打开你的sqlserver  如下所示:

找到 DefaultContext  查看数据是否导入成功

 

 这样热腾腾的三个表就进去啦,这就是 EF的code first  ,相关的表的外键会自动创建

 

相关查询可以用如下代码

IList<Teacher> c2 = context.Teachers.AsNoTracking().Include("Students").Include("Courses").ToList();
IList<Teacher> c = context.Teachers.AsNoTracking().Include("Students").ToList();

注意引入 using System.Data.Entity;

不懂的可以咨询我,微信如下:

 

以上是关于EF 下的code fist 模式编程的主要内容,如果未能解决你的问题,请参考以下文章

关于 CommitTransaction 的 EF Code First 问题 - 使用存储库模式

EF 连接 mysq l数据库 code first模式 的实践

EF Core开发模式之Code First

EF 4.1 Code First - 我应该使用啥模式?

[搬运] 将 Visual Studio 的代码片段导出到 VS Code

ORM框架 EF - code first 的封装