数据迁移(Migrations)

启用数据迁移
在控制台中输入如下命令:Enable-Migrations

这时会在项目目录中增加一个Migrations文件夹,里面放置了两个文件:
EF会通过C#代码的方式将每一次对模型的修改保存到这个文件夹中

每个迁移文件,都包含Up和Down两个重写函数,分别对应于更新和回退。
上面的代码也很直白,Up函数中创建一个Students表,定义表结构并指定ID主键(PrimaryKey),Down函数用来回退操作,里面简单的删除了Students表。

EF会在数据库中自动生成一个名为__MigrationHistory表来跟踪数据库的状态。

增加迁移项需要我们手工来进行,在程序包管理器控制台中,输入如下命令:
Add-Migration Add_Annotation_Name_Major(名字)

这时会在Migrations目录下生成迁移文件,文件是以[时间+迁移名]命名的,方便查找:
201612160406415_Add_Annotation_Name_Major.cs

更新到数据库
此时,数据库尚未改变,我们还需要手工命令来更新数据库:
Update-Database

在真实的项目中,数据库可能部署在远程服务器中,这时我们就不能直接在VS中通过Update-Database来更新数据库了。
不过我们可以生成更新SQL脚本,然后拿到数据库服务器上执行。生成这个SQL脚本的方法:
Update-Database ? -Script
-SourceMigration: InitialCreate
-TargetMigration: Add_Annotation_Name_Major

安装EF
工具----库程序包管理器---程序包管理器控制台
在下方鼠标闪动的地方输入:Install-Package EntityFramework 然后回车,安装成功出现“已成功将“EntityFramework 6.1.3”添加到 MVC+EFBoKeYu。”字样

PM> Install-Package EntityFramework
已成功安装“EntityFramework 5.0.0”。
已成功将“EntityFramework 5.0.0”添加到 EFDemo。
Type 'get-help EntityFramework' to see all available Entity Framework commands.

安装后的变化
上述操作执行完毕后,会发现项目变化
1.新增了一个packages.config文件

PM> enable-migrations
会生成Migrations
AutomaticMigrationsEnabled = true;设为true

然后在添加字段里的那个类 写好要添加的字段,默认项目一定要选对,选对!!!!!!!!!
这里的添加是与数据库同步的,改后要加Add-Migration xxx Update-Database

无论你是添加的了字段还是删除了字段,
第一步都是PM> Add-Migration 添加了username字段
第二步是 PM> Update-Database
刷新数据库,就会看到一些字段就没了

Enable-Migrations 这个命令将在项目下创建文件夹 Migrations

生成、运行迁移

  Code First Migrations 有两个你需要熟悉的命令:

Add-Migration 将 scaffold 创建下一次基于上一次迁移以来的更改的迁移;
Update-Databse 将任何挂起的迁移应用到数据库

PM> Add-Migration 添加了username字段
Scaffolding migration '添加了username字段'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 添加了username字段' again.
PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201707081019084_添加了username字段].
Applying explicit migration: 201707081019084_添加了username字段.
Running Seed method.

PM> Add-Migration xxx
Scaffolding migration 'xxx'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration xxx' again.
PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201707081021323_xxx].
Applying explicit migration: 201707081021323_xxx.
Running Seed method.
-----------------------------------------------------------------------------------------------------------------------------------

使用CodeFirst的约定连接并指定数据库名称
如果在应用程序中没有做任何配置,那么调用构造函数时,可以给它一个string类型的参数,这样将建立一个以该参数为名字的数据库。例如:

public class BloggingContext : DbContext
{
public BloggingContext(): base("BloggingDatabase")
{
}
}

例子中将在SQL Express或者LocalDb中创建名称为"BloggingDatabase"的数据库。同样,如果SQL Express和LocalDb都安装的话,那么EF会选择在SQL Express中创建数据库。

使用CodeFirst及配置文件中的connection string
你也可以选择先先在配置文件中设置好connection string。例如:

<configuration>
<connectionStrings>
<add name="BloggingCompactDatabase"
providerName="System.Data.SqlServerCe.4.0"
connectionString="Data Source=Blogging.sdf"/>
</connectionStrings>
</configuration>

然后,创建数据库上下文时使用下面的代码:

public class BloggingContext : DbContext
{
public BloggingContext(): base("BloggingCompactDatabase")
{
}
}

此时,创建数据库时,就会使用ConnectionString中指定的服务器和数据库名字。

你会发现这里创建数据库上下文的代码与上一节的非常相似,除了参数名字不一样。事实上,上面一段代码执行的时候,EF首先查找配置文件中有没有以“BloggingCompactDataBase”命名的连接字符串,如果有则使用该连接字符串,连接数据库(数据库未创建时会自动创建)。如果没有,那么会在SQLExpress或者LocalDb中名创建数名为“BloggingCompactDataBase”的数据库。

或者,也可以用“name=<connection string name>” 作为基类DbContext的构造函数的参数。例如:

public class BloggingContext : DbContext
{
public BloggingContext()
: base("name=BloggingCompactDatabase")
{
}

//下面的必不可少  映射
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

}

}

注意:这种形式明确说明需要在配置文件中找到名字为“BloggingCompactDataBase”的连接字符串,如果没有找到,则会抛出异常。
------------------------------------------------------------------------------------------------------------------------
使用Database/Model First 及配置文件中的连接字符串
ModelFirst与CodeFirst不同,Models通过EF设计器创建,Models通常以EMDX文件的存在。

设计器会添加一个EF连接字符串到配置文件中。这个连接字符串比较特殊,它包括怎样从EDMX文件中获取信息。例如:

<configuration>
<connectionStrings>
<add name="Northwind_Entities"
connectionString="metadata=res://*/Northwind.csdl|
res://*/Northwind.ssdl|
res://*/Northwind.msl;
provider=System.Data.SqlClient;
provider connection string=
&quot;Data Source=.\sqlexpress;
Initial Catalog=Northwind;
Integrated Security=True;
MultipleActiveResultSets=True&quot;"
providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>

EF设计器会生成下面的代码,其中通过传递连接字符串的名字来告诉DbContext使用这个连接字符串。

public class NorthwindContext : DbContext
{
public NorthwindContext()
: base("name=Northwind_Entities")
{
}
}

DbContext就会装入已经存在的model,而不是使用CodeFirst从code中计算,因为连接字符串是一个EF Connection string,其中包含了使用的model的细节。

ocdefirst安装更新数据库的更多相关文章

  1. 安装SQL数据库时遇到问题。需要更新以前的visual studio 2010实例

    安装SQL数据库时遇到问题.需要更新以前的visual studio 2010实例此计算机安装了需要service pack 1更新的visual 2010,必须安装此更新才能成功安装选择的SQL s ...

  2. LINQ to SQL更新数据库操作(转载)

    使用LINQ to SQL建模Northwind数据库 在这之前一起学过LINQ to SQL设计器的使用,下面就使用如下的数据模型: 当使用LINQ to SQL设计器设计以上定义的五个类(Prod ...

  3. MYSQL 安装更新,使用,管理,备份和安全等

    如何安装更新,使用,管理,备份和安全,维护优化一个MYSQL系统. 一.MYSQL发展历史,特点.对SQL语法进行介绍 二.如何安装一个MYSQL系统 三四.如何利用SQL语言以及其他的客户工具对MY ...

  4. Linux下安装MySQL数据库以及用C语言编程存取数据库

    ubuntu下安装软件相当简单,一条简单的 apt-get install 就可以解决,相比源码安装方式唯一的缺点就是,你无法自定义软件的安装目录.不过这也不是什么太大的缺点.下面我们就用 apt-g ...

  5. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.1 安装Oracle数据库软件和创建数据库概览)

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.1 安装Oracle数据库软件和 ...

  6. 转载Code First Migrations更新数据库架构的具体步骤

    [转载] Code First Migrations更新数据库结构的具体步骤 我对 CodeFirst 的理解,与之对应的有 ModelFirst与  DatabaseFirst ,三者各有千秋,依项 ...

  7. Windows Azure上的Odoo(OpenERP)-1.创建Ubuntu虚拟机,安装PostgreSQL 数据库

    前提是您必须拥有Windows Azure的账号,如果没有的话,可以去Windows Azure 中国区网站申请免费试用账号.哈哈,我就是第一批申请的试用账号,感觉自己挺幸运的.申请的过程就不写了,请 ...

  8. Linux 下安装oracle数据库

    原文出处       http://www.linuxidc.com/Linux/2015-02/113222.html 需要安装Oracle DataGuard,所以先要安装单台Oracle11g, ...

  9. Docker学习实践 - Docker安装MySql数据库

    Docker安装MySQL数据库 1.Ubuntu安装MySQL安装 (1)安装编译源码需要的包 sudo apt-get install make cmake gcc g++ bison libnc ...

随机推荐

  1. 用LinkedList模拟Stack功能

    集合体系在Java中比较重要,整个集合体系是在JDK1.2版本后出现,Collection作为整个体系的顶层,拥有整个体系通用的功能.对于其下面的小弟,也是各有千秋.下面就一道面试题来看看Linked ...

  2. button click event in jqxgrid jqwidgets

    button click event in jqxgrid jqwidgets http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/p ...

  3. redis动态修改参数

    通过 config get 命令可以查看参数. 通过config set 可以修改某些参数 动态关闭redis的aof功能:(不要忘了也修改配置文件中的aof选项使其保持一致) 127.0.0.1:6 ...

  4. Android chromium 1

    For Developers‎ > ‎Design Documents‎ > ‎ Java Resources on Android Overview Chrome for Android ...

  5. SSD-tensorflow-3 重新训练模型(vgg16)

    一.修改pascalvoc_2007.py 生成自己的tfrecord文件后,修改训练数据shape——打开datasets文件夹中的pascalvoc_2007.py文件,根据自己训练数据修改:NU ...

  6. session 存入 memcahce

    <?php header('content-type:text/html;charset=utf-8'); class RedisSessionHandler{ public $ttl; //失 ...

  7. CF620E New Year Tree(线段树+二进制)

    题解 弱智题,二进制表示位数.合并时用| 就是被1<<x卡了好久. 要写成1ll<<x才行 #include<iostream> #include<cstri ...

  8. 洛谷 P2386 放苹果

    P2386 放苹果 题目背景 (poj1664) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入 ...

  9. 概率dp HDU 3853

    H - LOOPS Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ci ...

  10. MapReduce实现线性回归

    1. 软件版本号: Hadoop2.6.0(IDEA中源代码编译使用CDH5.7.3,相应Hadoop2.6.0),集群使用原生Hadoop2.6.4.JDK1.8,Intellij IDEA 14 ...