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模式 的实践