最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。
十年河东十年河西,莫欺少年穷
学无止境,精益求精
本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧惭愧。
如有不明白,请参考: 及
话不多说,直接上代码:
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace EF_Test.DAL{ public class StudentInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges{ protected override void Seed(StudentContext context) { //添加学生 var studentList = new List { new Student{Name = "陈依依", Sex = "女", StudentNum = "081309201"}, new Student{Name = "戚永景", Sex = "女", StudentNum = "081309202"}, new Student{Name = "刘华丽", Sex = "女", StudentNum = "081309203"}, new Student{Name = "薛正钦", Sex = "男", StudentNum = "081309204"}, new Student{Name = "王松涛", Sex = "男", StudentNum = "081309205"}, new Student{Name = "王自龙", Sex = "男", StudentNum = "081309206"}, new Student{Name = "高其峰", Sex = "男", StudentNum = "081309207"}, new Student{Name = "陈欣欣", Sex = "女", StudentNum = "081309208"}, new Student{Name = "陈丽阳", Sex = "女", StudentNum = "081309209"} }; studentList.ForEach(s => context.Students.Add(s)); context.SaveChanges(); //添加课程 var courseList = new List { new Course{ Name="数据结构"}, new Course{ Name="计算机原理"}, new Course{ Name="网络技术"} }; courseList.ForEach(s => context.Courses.Add(s)); context.SaveChanges(); //添加分数 var scoreList = new List () { new Score{ StudentID=1,CourseID=1,StudentScore=90}, new Score{ StudentID=2,CourseID=1,StudentScore=91}, new Score{ StudentID=3,CourseID=1,StudentScore=92}, new Score{ StudentID=4,CourseID=1,StudentScore=93}, new Score{ StudentID=5,CourseID=1,StudentScore=94}, new Score{ StudentID=6,CourseID=1,StudentScore=95}, new Score{ StudentID=7,CourseID=1,StudentScore=96}, new Score{ StudentID=8,CourseID=1,StudentScore=97}, new Score{ StudentID=9,CourseID=1,StudentScore=98} }; scoreList.ForEach(s => context.Scores.Add(s)); context.SaveChanges(); } }}
模型类如下:
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Data.Entity;using System.Data.Entity.ModelConfiguration.Conventions;using System.Linq;using System.Web;namespace EF_Test.DAL{ public class Student { [Key] public int Id { get; set; } [Required] [StringLength(10)] public string Name { get; set; }//姓名 [StringLength(2)] public string Sex { get; set; }//性别 [StringLength(20)] public string StudentNum { get; set; }//学号 } public class Course { [Key] public int Id { get; set; } [Required] [StringLength(20)] public string Name { get; set; }//课程名称 } public class Score { [Key] public int Id { get; set; } public int StudentScore { get; set; }//学生分数 public int StudentID { get; set; }//学生ID public int CourseID { get; set; }//课程ID public virtual Student Student { get; set; }//virtual关键字修饰,用于延迟加载 提高性能 只有显式调用时 属性==对象 public virtual Course Course { get; set; }//virtual关键字修饰,用于延迟加载 提高性能 只有显式调用时 属性==对象 } public class StudentContext : DbContext { public StudentContext() : base("StudentContext")//指定连接字符串 { } public DbSetStudents { get; set; } public DbSet Courses { get; set; } public DbSet Scores { get; set; } /// /// OnModelCreating方法中的modelBuilder.Conventions.Remove语句禁止表名称正在多元化。如果你不这样做,所生成的表将命名为Students、Courses和Enrollments。相反,表名称将是Student、Course和Enrollment。开发商不同意关于表名称应该多数。本教程使用的是单数形式,但重要的一点是,您可以选择哪个你更喜欢通过包括或省略这行代码的形式。 /// /// protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } }}
OK,截止到这儿,您可能会问我,protected override void Seed()这个重写的方法什么时间执行呢?
在此,需要两点要求
1、在web.config中<entityFramework>接点下加入如下配置:
根据上述类文件,我们应该明白EF_Test是个命名空间,EF_Test.DAL.StudentContext是数据库上下文,EF_Test.DAL.StudentInitializer是初始化类
2、加上了上述配置,还需模型结构发生改变时,程序才会自动执行Seed()方法,例如:将字段长度由50改为20
综上所述条件满足后,程序就会自动重新删除数据库并建立
@陈卧龙的博客