EF 下的code fist 模式编程

时间:2023-03-08 16:23:53

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 = ; i < ; 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  如下所示:

EF 下的code fist 模式编程

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

EF 下的code fist 模式编程

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

EF 下的code fist 模式编程

相关查询可以用如下代码

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 模式编程