博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
阅读量:6717 次
发布时间:2019-06-25

本文共 4713 字,大约阅读时间需要 15 分钟。

   最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。

   十年河东十年河西,莫欺少年穷

   学无止境,精益求精

   本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧惭愧。

   如有不明白,请参考: 及 

   话不多说,直接上代码:

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 DbSet
Students { 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

   综上所述条件满足后,程序就会自动重新删除数据库并建立

   @陈卧龙的博客

 

转载地址:http://uakmo.baihongyu.com/

你可能感兴趣的文章
multipart/form-data和application/x-www-form-urlencoded的区别
查看>>
[LeetCode] Reorder List 链表重排序
查看>>
[总结]文件传输模型之文件中转
查看>>
jQuery(一)引入
查看>>
Facebook内部分享:26个高效工作的小技巧
查看>>
jstack和线程dump分析
查看>>
NETSH WINSOCK RESET这条命令的含义和作用?
查看>>
SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int
查看>>
第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotion模拟器...
查看>>
AtomicInteger简介
查看>>
(转)解决ScrollView嵌套ListView或者GridView导致只显示一行的方法
查看>>
html5 -- audio标签
查看>>
DNG格式解析
查看>>
Windows 下搭建LDAP服务器
查看>>
2015年第8本(英文第7本):the city of ember 微光城市
查看>>
FZU操作系统课程实验 实验一
查看>>
【转】Android Activity和Intent机制学习笔记----不错
查看>>
Eclipse背景颜色修改
查看>>
linux下安装oracle11g 64位最简客户端(转)
查看>>
搭建XMPP协议,实现自主推送消息到手机
查看>>