Entity Framework Code First迁移基本面拾遗
项目中用到了EF Code First和迁移,但发现有些方面似懂非懂。比如:如何在迁移文件中控制迁移过程?如果在迁移文件中执行SQL语句?如何使用Update-Database的其它参数?数据库在生产环境的时候如何迁移?于是就有了下面的这些体验:
enable-migration
第一次生成数据库时使用。
→ enable-migration
→ 在类库下多了Migrations文件夹,包含Configuration.cs和每次的迁移记录文件
每次的迁移文件大致是:
public partial class InitialCreae : DbMigration
{
public override void Up()
{
CreateTable(
"Aliases",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(nullable: false),
UserName = c.String(maxLength:),
Email = c.String(),
Bio = c.String(),
CreateDate = c.DateTime(nullable: false)
}
)
.PrimaryKey(t => t.Id); CreateTable(
"Tweets",
c => new
{
Id = c.Int(nullable: false, identity:true),
CreateDate = c.DateTime(nullable: false),
AliasId = c.Int(nullable:false)
}
)
.PrimaryKey(t => t.Id)
.ForeignKey("Aliases", t => t.AliasId, cascadeDelete: true)
.Index(t => t.AliasId);
} public override Down()
{
DropIndex("Tweets", new[]{"AliasId"});
DropForeignKey("Tweets", "AliasId", "Aliases");
DropTable("Tweets");
DropTable("Aliases");
}
}
迁移的配置文件大致是:
internal sealed class Configuration : DbMigrationsConfiguration<TweeterContext>
{
public Configuration()
{
AutomatecMigrationsEnabled = false;
} protected override void Seed(TwitterContext context)
{ }
}
数据库初始化
Database.SetInitializer(new MigrateDatabaseToLastesVerstion<TwitterContext, Configuration>());
自动或手动迁移设置
public class Configuration : : DbMigrationsConfiguration<TweeterContext>
{
public Configuration()
{
//如果手动迁移,设置成false
AutomaticMigrationsEnabled = true; //即使列中有数据,这个列也可以被删除,删除的时候只是少了该列的数据
AutomaticMigrationDataLossAllowd = true;
}
}
Add-Migration
每次迁移保存在本地。
配置文件大致如下:
public class Configuration : DbMigrationsConfiguration<TwitterContext>
{
public Configuraiton()
{
AutomatcMigrationsEnabled = false;
AutomaticMigrationDataLossAllowed = true;
} protected override void Seed(TwitterContext context)
{ }
}
→ 比如增加一个列
→ 运行: Add-Migration somename
→ 迁移文件大致是
public partial class AddSomeColumnToSomeTable : DbMigration
{
public override void up()
{
AddColumn("sometable", "somecolumn", c => c.String());
} public override void Down()
{
DropColumn("sometable", "somecolumn");
}
}
Update-Database
更新数据库,执行没有被执行的迁移文件。
→ 执行:update-database -verbose
verbose表示显示更新明细,会显示执行了哪些迁移,执行了哪些SQL语句。
→ 其它参数
TargetMigration
Script & SourceMigration:创建SQL语句
Force:允许数据丢失
ProjectName:DbMigrationsConfiguraiton所在的类库
ConfigurationTypeName:DbMigrationsConfiguration的继承类
SartUpProjectName:连接字符串所在的类库
ConnectionString & ConnectionProviderName:明确连接字符串或provider
或者通过:get-help update-database -detailed, 了解更多。
回滚
Update-Database -TargetMigration:"SomeMigrationName" -verbose
在迁移文件中自定义一些迁移动作,控制迁移过程
所有的迁移文件继承自DbMigration这个类,该类提供了很多方法供我们控制迁移过程。
→ 比如让增加的类有一个默认值
public partial class AddSomeColumn : DbMigration
{
public override void Up()
{
AddColumn("sometable", "somecolumn", c => c.String(defaultValue: "sth"));
} public override void Down()
{
DropColumn("sometable", "somecolumn");
}
}
执行SQL语句
比如,现有数据的某些列为NULL,如果想给这些行的该列附上值,该如何做呢?
→ 改变领域模型
→ 执行:Add-Migration somename
→ 在迁移文件中执行SQL语句
public partial class AddSome : DbMigration
{
public override void Up()
{
AddColumn("table", "column", c => c.String(maxLength:));
Sql("Update table set column='sth'");
} public override void Down()
{
DropColumn("table", "column");
}
}
→ Update-Database -verbose
数据库的种子数据
public class Configuration : DbMigrationsConfiguraiton<TwitterCotext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
AutomaticMigraitoinDataLossAllowed = true;
} protected override void Seed(TwitterContext context)
{
context.Aliases.AddOrUpdate(a => a.Name, new Alias{}, new ALias())
}
}
对生产环境下的数据库作迁移
→ 执行:udb -script -verbose
→ 弹出一个可以编写sql语句的窗口,此时没有与数据库连接
alter table sometable add column nvarchar(max)
insert into _MigrationHistory(MigrationId,CreatedOn, Model, ProductVersion) values(...)
→ 执行:udb -verbose
此时与数据库连接,执行语句
→ 如果想从某个一个迁移开始
udb -sourcemigration:"somename" -script
→ 执行: udb -verbose
关闭种子数据
Database.SetIntializer<SomeContext>(null);
Entity Framework Code First迁移基本面拾遗的更多相关文章
- Entity Framework Code First 迁移
Entity Framework CodeFirst数据迁移 http://www.cnblogs.com/aehyok/p/3325459.html Entity Framework Code Fi ...
- ASP.NET MVC+Entity Framework code first 迁移
再来一张,选择 MVC 模版,其他的没选过,不会用 =_=!! 身份验证用个人用户账户,这个是为了偷懒,话说 ASP.NET Identity 还是很给力的,不用白不用 ^_^~ 点击确定之后,会看 ...
- Entity Framework Code First 迁移数据库
新版EF,系统实现过程中如果对Model进行更改,队形修改数据库并不能正常运行项目,需要借助Code First 手动迁移数据库 首先启用迁移,允许迁移Context Tools->Librar ...
- Entity FrameWork Code First 迁移命令详解
1. Enable-Migrations 启动迁移 执行get-help Enable-Migrations –detailed 查看Enable-Migrations的详细用法. -ContextT ...
- Entity Framework Code First 数据迁移
需要在[工具 --> NuGet 程序包管理器 --> 程序包管理器控制台]中输入三个命令: Enable-Migrations (初次迁移时使用) Add-Migration [为本次迁 ...
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
- Entity Framework CodeFirst数据迁移
前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是“Database First”还是“Model First”当模型发生改变了都可以通过Visual ...
- Entity Framework Code First学习系列
Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...
- Entity Framework Code first(转载)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
随机推荐
- quick-cocos2d-x之testlua之mainMenu.lua
require "helper" require "testResource" require "ActionsTest.ActionsTest&qu ...
- emacs windows 下配置
一般windows的emacs是一个压缩包,解压一下,即可.主程序在bin文件夹下.需要设置一下emacs的home路径, 打开注册表,创建HKEY_LOCAL_MACHINE/SOFTWARE/GN ...
- 关于MySql数据库设计表与查询耗时分析
本地建一张表persons,使用脚本插入了1000万条数据 下面比较几种查询方法的耗时(查询9000000到9000005这中间5条数据) 查询结果: 1: SELECT * FROM test.pe ...
- XML文件与实体类的互相转换
XML文件与实体类的互相转换 一.将XML文件反序列化为实体类对象 1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config).但是现在为了演示XML ...
- [转]Oracle数据泵的使用
使用数据泵导出数据 1.连接Oracle数据库SQL> conn / as sysdba已连接. 2.创建一个操作目录SQL> create directory dump_dir as ' ...
- Semantic-UI和其他几个前端框架
本来是想介绍Semantic-UI的,但如果只介绍这个框架,没什么内容,框架相关feature站点上有不需要说,所以干脆列出自己常用的几个前端框架,算是做个阶段性总结. 本文的核心是侧重于HTML/C ...
- Sql语句,先查询再插入一条语句完成。
if ( (select COUNT(*) from Hr where 考勤号码 = '149' and 日期时间 = '2015/7/3 12:00:26') = 0 )INSERT INTO [ ...
- 无线安全专题01--kali破解WPA
最近一直用flask写自己的博客框架,等过段时间才能将其分享出来,所以在此期间决定开个无线安全的专题,分享一些无线安全方面的知识. 好了,废话不多说,咱们进入今天的主题,使用kali linux上的无 ...
- 你的联动够快够小吗——基于Telerik(ASP.NET平台)
一.目的 这篇文章主要是以如何实现联动下拉为核心,其要原理是利用两个下拉控件.默认两个下拉均为未选择状态,并且 父下拉中存在数据,子下来中没有数据.只有当用户选择某一个父下拉中的某条数据后,子下拉中才 ...
- 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序
小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...