通过启用迁移和更新数据库可以很容易的生成一张表。但是对数据库修改之后,通过数据迁移就没那么好实现了。

这里用到数据库生成策略,进行对数据库操作:

一、3种主要数据库生成策略

1 CreateDatabaseIfNotExists 方法会在没有数据库时创建一个,这是默认行为。

Database.SetInitializer(new CreateDatabaseIfNotExists<xxx>());       

2 DropCreateDatabaseIfModelChanges 如果我们在在模型改变时,自动重新创建一个新的数据库,就可以用这个方法。在这开发过程中非常有用。

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<xxx>());      

3 DropCreateDatabaseAlways 如果你想在每次运行时都重新生成数据库就可以用这个方法。

Database.SetInitializer(new DropCreateDatabaseAlways<xxx>()); 

修改数据库之后重新生成数据库,推荐使用 DropCreateDatabaseAlways

详细用法:

1).Global.asax:Application_Start()方法中添加:

Database.SetInitializer<ManagementDBContext>(new DropCreateDatabaseAlways<ManagementDBContext>());

  ManagementDBContext 为自己定义的Context上下文。

2).然后删除项目中启用数据迁移自动生成的文件夹:Migrations及下面所有内容

  不删除会报一个The DropCreateDatabaseAlways initializer did not drop or create the database backing context 'ManagementDBContext' because Migrations are enabled for the context. Use Migrations to manage the database for this context, for example by running the 'Update-Database' command from the Package Manager Console. 错误。

3).最后在代码中使用db对象,即可重新生成数据库。

  public ActionResult Index()
{
using (ManagementDBContext db = new ManagementDBContext())
{
var result = db.Permissions.ToList();
}
return View();
}

二、自定义生成策略

自定义策略主要用的自定义策略中重写的Seed方法。

可以在Seed方法中加一些初始数据,这样生成的时候就会生成初始数据。

public class ManagementDBContextInitializer : DropCreateDatabaseAlways<ManagementDBContext>
{
protected override void Seed(ManagementDBContext context)
{var roles = new List<Role>
{
new Role{
RoleName="超级管理员",
Description="Administrator"
},
new Role{
RoleName="普通管理员",
Description="Admin"
}
};
roles.ForEach(l => context.Roles.Add(l));
        base.Seed(context);
} }

Entity FrameWork Code First 之 MVC4 数据库初始化策略用法的更多相关文章

  1. Entity FrameWork Code First无法生成数据库 解决办法

    我是控制台应用程序,没有connectionStrings,试了几个方法也都不可以. 这是别人的博客用其他方法. http://www.cnblogs.com/Gyoung/archive/2013/ ...

  2. Entity Framework Code First数据库连接

    1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句: PM> Insta ...

  3. Entity Framework Code First数据库连接 转载 https://www.cnblogs.com/libingql/p/3351275.html

    Entity Framework Code First数据库连接   1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器 ...

  4. Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

    ORM作为一种数据库訪问机制已广泛地应用于各种项目其中,在.Net开发中,应用比較广泛的ORM框架大致有以下几个: 官方支持的有:Linq to SQL.Entity Framework.三方的有:N ...

  5. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  6. Entity Framework Code First属性映射约定

    Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...

  7. Entity Framework Code First关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  8. Entity Framework Code First使用DbContext查询

    DbContext.DbSet及DbQuery是Entity Framework Code First引入的3个新的类,其中DbContext用于保持数据库会话连接,实体变化跟踪及保存,DbSet用于 ...

  9. Entity Framework Code First添加修改及删除单独实体

    对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...

随机推荐

  1. Multiview

    新建3个ViewController的类 新建main.stroyboard,并配置好相应的布局(编辑界面,连接视图与类,ViewController的Storyboard ID,连接3个Button ...

  2. dubbo框架的介绍,应用

    http://www.cnblogs.com/Javame/p/3632473.html

  3. 每一行最后添加文字python脚本

    比较简单的在pycharm上跑的脚本 #_*_coding:utf-8_*_ #普通版 file = open("oldfile.txt","r",newlin ...

  4. Delphi 发送邮件 通过Office Outlook

    Delphi 发送邮件 通过Office Outlook 网上搜到的Delphi邮件发送系统,绝大多数是使用SMTP协议来发送. 但是事实上它们已经过时了,大多数邮件服务器已经屏蔽了Delphi In ...

  5. linux的ssh命令

    转自:http://man.linuxde.net/ssh ssh命令 网络安全 ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器. 语法 ssh(选项 ...

  6. Spring中 PROPAGATION_REQUIRED 解释

    转自:https://blog.csdn.net/bigtree_3721/article/details/53966617 事务传播行为种类 Spring在TransactionDefinition ...

  7. bootstrap-table固定表头固定列

    1.引入 bootstrap依赖于jquery bootstrap-table依赖于bootstrap,所以都需要引入 2. bootstrap-table有两种方式,html.js <tabl ...

  8. 【总结】两种 NIO 实现:Selector 与 Epoll

    时间2012-11-17 08:38:42 开源中国新闻原文  http://my.oschina.net/ielts0909/blog/89849 我想用这个话题小结下最近这一阶段的各种测试和开发. ...

  9. win64系统丢失d3dx9d_40.dll问题

    在Win64系统中,安装了DXSDK.DX9,却一直显示如上对话框,导致程序运行不起来. 于是我在网上找到了一个d3dx9d_40.dll,覆盖到C:\Windows\System32中,但是问题依然 ...

  10. Vue(3)- 安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用

    一.安装脚手架 1.下载node.js,本文下载版本为node-v8.12.0-x64.msi,一键式安装. 2.安装完成后,打开终端,输入node,可进入node环境(两次ctrl+c退出),如下图 ...