Entity Framework 数据库初始化的三种方法
在数据库初始化产生时进行控制,有三个方法可以控制数据库初始化时的行为。分别为CreateDatabaseIfNotExists、DropCreateDatabaseIfModelChanges、DropCreateDatabaseAlways。
一、定义
1、CreateDatabaseIfNotExists:在没有数据库时创建一个,这是默认行为。
2、DropCreateDatabaseIfModelChanges:模型改变时,自动重新创建一个新的数据库,就可以用这个方法。在这开发过程中非常有用。
3、DropCreateDatabaseAlways:每次运行时都重新生成数据库。
二、使用
1、新建一个类继承
public class EasyUIInitializer : DropCreateDatabaseIfModelChanges<EasyUIContext>
{ }
2、重写Seed方法,插入数据
protected override void Seed(EasyUIContext context)
{
var resources = new List<Resource>
{
new Resource { Name = "其它管理", IconCls="icon-widgets" ,ParentId=null,Sort=,Category=,CreateId=},
new Resource { Name = "系统资源", IconCls="icon-navigation" ,ParentId=,Sort=,Category=,CreateId=},
new Resource { Name = "角色列表", IconCls="icon-navigation" ,ParentId=,Sort=,Category=,CreateId=},
new Resource { Name = "后台用户", IconCls="icon-navigation" ,ParentId=,Sort=,Category=,CreateId=},
new Resource { Name = "系统日志", IconCls="icon-navigation" ,ParentId=,Sort=,Category=,CreateId=}
};
resources.ForEach(s => context.Resource.Add(s));
context.SaveChanges(); base.Seed(context);
}
3、运行
在Global.asax里执行
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes); Database.SetInitializer<EasyUIContext>(new EasyUIInitializer());
}
或在EF上下文的OnModelCreating里执行
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<EasyUIContext>(new EasyUIInitializer());
}
4、其它
初始化包括两个主要步骤。首先,使用Code First在内存中根据默认规则和配置创建模型。其次,使用已设置的数据库初始化器将用于存储数据的数据库初始化。
初始化是延迟加载的,所以创建一个实例的是不完全满足初始化发生的条件的。必须执行对模型的操作,如查询或添加实体才会发生。
但我们可以可以调用DbContext.Database.Initialize方法,对模型执行任何操作的时候强制初始化。
using (var context = new EasyUIContext())
{
context.Database.Initialize(true);
}
Entity Framework 数据库初始化的三种方法的更多相关文章
- C# Entity Framework 更新数据的三种方法
例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...
- Entity Framework 数据库初始化四种策略
策略一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testC ...
- Entity Framework数据库初始化四种策略
策略一:数据库不存在时重新创建数据库 程序代码 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists< ...
- 【EF】EntityFramework 更新数据库字段的三种方法
实体类 public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public Tes ...
- Oracle数据库备份与恢复的三种方法
转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...
- js二维数组定义和初始化的三种方法总结
js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...
- EntityFramework 更新数据库字段的三种方法
例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...
- MySQL数据库改名的三种方法
前不久去面试,被问到Innodb引擎的表如何改数据库名,当时我也只回答了MyISAM改如何操作,被一些细节问题打败,真是操蛋. 如果表示MyISAM那么可以直接去到数据库目录mv就可以. Innodb ...
- Entity Framework关联实体的三种加载方法
推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...
随机推荐
- fir.im Weekly - 关于 iOS10 适配、开发、推送的一切
"小程序"来了,微信变成名副其实的 Web OS,新一轮的Web App 与Native App争论四起.程序员对新技术永远保持灵敏的嗅觉和旺盛的好奇心,@李锦发整理了微信小程序资 ...
- STM32F429 LCD程序移植
STM32F429自带LCD驱动器,这一具有功能给我等纠结于屏幕驱动的程序员带来了很大的福音.有经验的读者一定有过这样的经历,用FSMC驱动带由控制器的屏幕时候,一旦驱动芯片更换,则需要重新针对此驱动 ...
- .Net语言 APP开发平台——Smobiler学习日志:手机应用的TextTabBar快速实现方式
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...
- 【C#公共帮助类】 ToolsHelper帮助类
这个帮助类,目前我们只用到了两个,我就先更新这两个,后面有用到的,我会继续更新这个Helper帮助类 在Tools.cs中 有很多方法 跟Utils里是重复的,而且Utils里的方法更加新一点,大家可 ...
- 使用CocosSharp制作一个游戏 - CocosSharp中文教程
注:本教程翻译自官方<Walkthrough - Building a game with CocosSharp>,官方教程有很多地方说的不够详细,或者代码不全,导致无法继续,本人在看了G ...
- AngularJs2与AMD加载器(dojo requirejs)集成
现在是西太平洋时间凌晨,这个问题我鼓捣了一天,都没时间学英语了,英语太差,相信第二天我也看不懂了,直接看结果就行. 核心原理就是require在AngularJs2编译过程中是关键字,而在浏览器里面运 ...
- protocol buffers vs json vs XML
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 在分布式系统中,数据序列化传递的情形非常常见,主流的三种,JSON.XML.Protobuf. XML现在 ...
- ABP框架 - 介绍
文档目录 本节内容: 简介 一个快速示例 其它特性 启动模板 如何使用 简介 我们总是对不同的需求开发不同的应用.但至少在某些层面上,一次又一次地重复实现通用的和类似的功能.如:授权,验证,异常处理, ...
- ABP框架 - 多层结构
文档目录 本节内容: 简介 ABP结构 多层 其它层(通用) 领域(Core)层 应用层 基础层 Web & 表示层 其它 总结 简介 一个应用的代码库的分层是一个广为接受的技术,用来减少复杂 ...
- ABP框架 - 依赖注入
文档目录 本节内容: 什么是依赖注入 传统方式的问题 解决方案 构造器注入模式 属性注入模式 依赖注入框架 ABP 依赖注入基础 注册依赖 约定注入 辅助接口 自定义/直接 注册 使用IocManag ...