EF是ORM(实体映射)
1、实体对象
2、实体之间的关系 3、如何映射(映射规则)EF三中模式
Database First //数据库优先 Model First //模型优先 Code First //代码优先一、EF来创建数据库
1、实体在MVC解决方案中,Model文件夹内新建实体(类)
1 ///2 /// 学生表 3 /// 4 public class Student 5 { 6 ///7 /// 学生编号(属性名为ID或者类名+ID 会自动生成为数据库的主键) 8 /// 9 public int StudentID { get; set; }10 public string FirstName { get; set; } //姓11 public string LastName { get; set; } //名12 public string FullName //全名13 {14 get15 {16 return LastName + "." + FirstName;17 }18 }19 public DateTime EnrollDate { get; set; }//登记时间20 /*********************导航属性(引用属性 集合属性)*************************/21 public ICollectionEnrollments { get; set; }22 }
1 ///2 /// 课程表 3 /// 4 public class Course 5 { 6 public int CourseID { get; set; }//课程ID自动为主键 7 public string Title { get; set; }//课程名 8 public int Credit { get; set; }//学分 9 /*********************导航属性(引用属性 集合属性)*************************/10 public ICollectionEnrollments { get; set; }11 }
1 ///2 /// 成绩表 3 /// 4 public class Enrollment 5 { 6 public int EnrollmentID { get; set; } 7 public int StudentID { get; set; } 8 public int CourseID { get; set; } 9 public decimal Score { get; set; }10 /*********************导航属性(引用属性 集合属性)*************************/11 public Student Student { get; set; }12 public Course Course { get; set; }13 }
1.新建DAL文件夹,创建SchoolDataContext类
2.先引用命名空间
1 using System.Data.Entity;//引用此命名空间2 using EFexample.Models;//引用模板(EFexample是解决方案名)3 using System.Data.Entity.ModelConfiguration.Conventions;//用于映射
3.在SchoolDataContext类里面写入
public class SchoolDataContext:DbContext { //上下文会自动寻找与上下文同名的连接字符串 //定义实体集(数据库中表名以属性的复数形式命名) public DbSetStudents { get; set; } public DbSet Courses { get; set; } public DbSet Enrollments { get; set; } /// /// 在模型创建的时候调用 /// /// protected override void OnModelCreating(DbModelBuilder modelBuilder) { //移除在生产数据库表时 以复数形式的约定 modelBuilder.Conventions.Remove(); } }
3、配置连接
打开Web.config配置连接 在这里name属性会自动查找类型名相同的上下文,如上面的SchoolDataContext
1 23 4 5 6 7
4、初始化数据库
打开Global.asax首先引用命名空间
1 using System.Data.Entity;//引用EF2 using EFexample.DAL;//引用上下文
在Application_Start方法下追加以下代码
1 //初始化数据库应用程序启动的时候创建数据库2 Database.SetInitializer(new SchoolInitializers());3 //这里的SchoolInitializers是建在DAL文件下的初始化器
5、初始化数据
在DAL文件下新建新建SchoolInitializer初始化器,可用于上面的初始化数据库参数
1 using System.Data.Entity;//引用EF2 using EFexample.Models;//引用Model
1 public class SchoolInitializers: DropCreateDatabaseIfModelChanges2 { 3 protected override void Seed(SchoolDataContext context) 4 { 5 List student = new List () 6 { 7 new Student{ 8 FirstName="Hu", 9 LastName="Langtao",10 EnrollDate=DateTime.Parse("2014-11-29 20:50:02")11 }12 };13 student.ForEach(item => context.Students.Add(item));14 context.SaveChanges();15 }16 }