ef mysql配置文件_EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>

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

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

学无止境,精益求精

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

话不多说,直接上代码:

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 = ""},

new Student{Name = "戚永景", Sex = "女", StudentNum = ""},

new Student{Name = "刘华丽", Sex = "女", StudentNum = ""},

new Student{Name = "薛正钦", Sex = "男", StudentNum = ""},

new Student{Name = "王松涛", Sex = "男", StudentNum = ""},

new Student{Name = "王自龙", Sex = "男", StudentNum = ""},

new Student{Name = "高其峰", Sex = "男", StudentNum = ""},

new Student{Name = "陈欣欣", Sex = "女", StudentNum = ""},

new Student{Name = "陈丽阳", Sex = "女", StudentNum = ""}

};

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=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=},

new Score{ StudentID=,CourseID=,StudentScore=}

};

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()]

public string Name { get; set; }//姓名

[StringLength()]

public string Sex { get; set; }//性别

[StringLength()]

public string StudentNum { get; set; }//学号

}

public class Course

{

[Key]

public int Id { get; set; }

[Required]

[StringLength()]

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中接点下加入如下配置:

根据上述类文件,我们应该明白EF_Test是个命名空间,EF_Test.DAL.StudentContext是数据库上下文,EF_Test.DAL.StudentInitializer是初始化类

2、加上了上述配置,还需模型结构发生改变时,程序才会自动执行Seed()方法,例如:将字段长度由50改为20

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

@陈卧龙的博客

EF CodeFirst关于Mysql如何自动生成数据库表

相对于sqlserver数据库,mysql的配置过程相对麻烦一些,我们从0讲起. 1.新建一个控制台应用程序 右键点击引用--管理NuGet程序包,搜索Mysql.Data.Entity并安装,安装完 ...

EF自动创建数据库步骤之三&lpar;自定义数据库初始器&rpar;

EF自动创建数据库需要我们告诉数据库如何进行初始化:如创建表后是否需要插入一些基础数据,是否 需要创建存储过程.触发器等.还有就是EF有三种初始化方式(参见下面三个类): DropCreateData ...

EF自动创建数据库步骤之一&lpar;实体类写法&rpar;

文章演示使用EF自动创建数据库第一个步骤创建实体类. 一.创建表映射实体类 using System; using System.Collections.Generic; using System.C ...

企业项目实战 &period;Net Core &plus; Vue&sol;Angular 分库分表日志系统五 &vert; 完善业务自动创建数据库

教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 说明 这节来把基础的业务部分完善一下. 因为 IQue ...

SpringBoot使用Hibernate,实现自动创建数据库表【博客数据库设计】

我们准备设计博客,那就要设计数据库. 我们可以使用Hibernate来自动生成数据库. 博客数据库的结构: 实体类: 博客 Blog 博客分类 Type 博客标签 Tag 博客评论 Comment 用 ...

EntityFramework SQLiteCodeFirst 自动创建数据库 关闭级联删除

外键的级联删除: 如A表中有主键idA, B表中设置外键(ForeignKey)为A表中的主键idA, 当A表中的记录被删除时, B表中所有引用此条记录的记录(即所有外键为idA的记录)将自动被删除 ...

sql2008 计划自动创建数据库分区【转】

本文转自:http://jingyan.baidu.com/article/6b97984d9a26ec1ca3b0bf77.html sql2008 计划自动创建数据库分区 固定增量的数据,自动创建 ...

centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例

centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例 一.监听配置(命令:netca) 1.以 oracle 用户输入命令,启动图形化工具配置监听 [oracle@lo ...

EF自动创建数据库步骤之二&lpar;继承DbContext类&rpar;

创建好表实体类后,接着就是创建数据库上下文(继承DbContext)并将实体类添加进来. 代码示例如下: using DBClientEntity; using System; using Syste ...

随机推荐

Eclispe怎么给工作空间下的项目分组

Eclispe怎么给工作空间下的项目分组 第一步,打开Java Working Set 第二步,添加分组 第三步,选择分组

HDU 3374 String Problem(KMP&plus;最大&sol;最小表示)

String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

robot API笔记2

robot.conf 设计方案 实现设置测试执行和输出处理. 这个方案实现了 RobotSettings 和 RebotSettings 内部使用的类 该框架. 不应该有这些类需要使用外部.这个包可以 ...

ios开发——实用技术篇Swift篇&amp&semi;拍照

拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...

JAVASCRIPT、ANDROID、C&num;分别实现普通日期转换多少小时前、多少分钟前、多少秒

貌似最近很流行这个,就写了个js函数实现之 ...

&lbrack;Angular 2&rsqb; Building a Toggle Button Component

This lesson shows you how to build a Toggle Button in Angular 2 from scratch. It covers using transc ...

使用NSTimer实现倒计时-备

今天在CocoaChina上面看到有人在问倒计时怎么做,记得以前在看Iphone31天的时候做过一个,今天翻出来运行不了了,原因是我的IphoneSDK升级到3.1了,以前使用的是2.2.1,在2.2 ...

Cocos2d&colon;使用 CCCamera 做滚动效果 (Four Ways of Scrolling with Cocos2D)

原版的:http://www.koboldtouch.com/display/IDCAR/Four+Ways+of+Scrolling+with+Cocos2D There are two class ...

多个JDK使用批处理命令切换JDK版本

本篇博客参考的链接 http://blog.csdn.net/hu199055/article/details/70145389 https://www.cnblogs.com/xdp-gacl/p/ ...

P2819 图的m着色问题(DFS)

思路:最开始的回溯顺序是正常的图遍历的回溯顺序,其实也没有错.但是,因为怎么调都不对,看了题解.下面,请结合题解思路和代码一起感受一下回溯顺序的改变,算法的改变和代码在哪里实现了这种顺序. 回溯顺序: ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值