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这个 ...
随机推荐
- ansible 控制windows
1.installing on the control machine On a Linux control machine: #pip install "pywinrm>=0.1.1 ...
- java多条件不定条件查询
网站或各类管理系统都会用到搜索,会用到一个或多个不确定条件搜索,单条件搜索比较简单,有时候会有多个条件共同查询,如果系统中已经提供了相关的方法供你使用最好,像我做这老系统改版,需要添加搜索,就要自己写 ...
- Json&Razor&控制器
JsonJson 属于JavaScript所以要书写在<script></script>中1.语法规则: 1.1:键值对 1.2:逗号分隔 1.3:花括号保存对象 1.4:方括 ...
- 打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数 其各位数字立方和等于该数本身。 例如:153是一个 "水仙花数 " 因为153=1*1*1+5*5*5+3*3*3
for (int i = 100; i <= 999; i++) { int geWei, shiWei, baiWei; baiWei = i / 100; shiWei = (i - bai ...
- android 一题多改系列——android 打电话实现两种方法
在android开发中,用户能够拨打电话是最基本的需求.俗话说“条条大路通罗马”,实现拨打电话的方式有多种,今天,就提供最常用两种. 首先,拨打电话,对于用户来说,是一个耗费的操作,因此,需要一定权限 ...
- WP8:在Unity中使用OpenXLive
Unity 4.2正式版开始添加了对Windows 8.Windows Phone 8等其他平台的支持,而且开发者可以免费使用Unity引擎来开发游戏了.而作为Windows Phone和Window ...
- Windows2003 架设VPN服务
一.确保Windows防火墙关闭. 在我的电脑上右键=>管理,在左边窗口找到“服务和应用程序”,展开,单击“服务”,在右边窗口中找到“Windows Firewall/Internet Conn ...
- 100道.net面试题
简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该 ...
- Windows上一步一步CoreRun
起步只有3个文件:CoreRun.exe, coreclr.dll, mscorlib.dll, HelloWorld.exe 运行命令:CoreRun HelloWorld.exe 出错: Asse ...
- [安卓] 4、CheckBox、RadioButton和Toast简单用法
和按钮类似,这里采用cb1.setOnCheckedChangeListener(this);方法分别对3个CheckBox进行CheckChange事件绑定,然后在onCheckedChange ...