系列文章:
EF-ModelFirst实现过程+数据库迁移 http://www.jianshu.com/p/2a53f318144d
EF-DBFirst实现过程 http://www.jianshu.com/p/eb84ec814926
建议学习路径 DBFirst->ModelFirst->CodeFirst
思路:通过代码编写实体和关联,编写上下文,根据实体和关联生成数据库。
EF-CodeFirst的优点
EF-CodeFirst相对于EF-ModelFirst和EF-DBFirst的有点在于,CodeFirst在数据库已经设计完成之后,能够较方便得再次对数据库进行更改(数据库迁移技术)。
关联
1.Database First是基于已存在的数据库,利用某些工具(如VS提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。也就是从一个数据库开始,然后生成实体框架和相应代码。
2.Model First 是先利用某些工具(如VS的EF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。
3.Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。
EF-CodeFirst的具体实现过程(以17-3-2课后作业为对象分析)
Step1:按需求新建若干实体Entity
BaseEntity基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EF_CodeFirst_17_3_2.Model
{
public class BaseEntity
{
public BaseEntity()
{
CreateTime = DateTime.Now;
UpdateTime = DateTime.Now;
}
/// <summary>
/// 创建ID
/// </summary>
public int ID { get; set; }
/// <summary>
/// 创建人
/// </summary>
public string CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新人
/// </summary>
public string UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
Classes班级实体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EF_CodeFirst_17_3_2.Model
{
public class Classes:BaseEntity
{
/// <summary>
/// 班级编号
/// </summary>
public int ClassNO { get; set; }
/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 班主任ID
/// </summary>
public int MentorID { get; set; }
/// <summary>
/// 班主任名称
/// </summary>
public virtual string MentorName { get; set; }
/// <summary>
/// 一个班级有多名学生
/// </summary>
public virtual List<Student> students { get; set; }
}
}
Course课程实体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EF_CodeFirst_17_3_2.Model
{
public class Course:BaseEntity
{
/// <summary>
/// 课程编号
/// </summary>
public int CourseNO { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 一个课程有多名学生
/// </summary>
public virtual List<Student> students { get; set; }
/// <summary>
/// 一门课程有多个教师
/// </summary>
public virtual List<Teacher> Teachers { get; set; }
}
}
学校School实体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EF_CodeFirst_17_3_2.Model
{
public class School : BaseEntity
{
/// <summary>
/// 学校编号
/// </summary>
public int SchoolNO { get; set; }
/// <summary>
/// 学校名称
/// </summary>
public string SchoolName { get; set; }
/// <summary>
/// 校长ID
/// </summary>
public int HeadmasterID { get; set; }
/// <summary>
/// 校长名称
/// </summary>
public string HeadmasterName { get; set; }
/// <summary>
/// 学校地址
/// </summary>
public string Address_new { get; set; }
}
}
学生Student实体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EF_CodeFirst_17_3_2.Model
{
public class Student:BaseEntity
{
/// <summary>
/// 学生编号
/// </summary>
public int StudentNO { get; set; }
/// <summary>
/// 学生名称
/// </summary>
public string StudentName { get; set; }
/// <summary>
/// 一个学生属于一个班级名称
/// </summary>
public virtual Classes ClassName { get; set; }
/// <summary>
/// 一个学生有多门课程
/// </summary>
public virtual List<Course> Courses { get; set; }
}
}