数据迁移(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. 四 numpy操作数组输出图片

    一.读取一张图片,修改颜色通道后输出 # -*- coding=GBK -*- import cv2 as cv import numpy as np #numpy数组操作 def access_pi ...

  2. 洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化

    Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...

  3. ajax+h5实现文件上传,成功即显示缩略图。

    官方参考文档: http://fex.baidu.com/webuploader/ 文件下载地址: https://github.com/fex-team/webuploader/releases/d ...

  4. nodejs学习(一)--express+ejs生成项目

    一.说一下 首先保证node环境已经安装完毕,npm能正常使用,安装可自行百度,比较简单,在此不做赘述. 二.直接开码 安装 npm install express express-generator ...

  5. 紫书 例题 10-7 UVa 10820 (欧拉函数)

    这道题要找二元组(x, y) 满足1 <= x, y <= n 且x与y互素 那么我就可以假设x < y, 设这时答案为f(n) 那么答案就为2 * f(n) +1(x与y反过来就乘 ...

  6. 剑指Offer面试题27(Java版):二叉搜索树与双向链表

    题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建新的结点.仅仅能调整树中结点指针的指向. 比方例如以下图中的二叉搜索树.则输出转换之后的排序双向链表为: 在二叉树中,每一 ...

  7. No enclosing instance of type E is accessible.

    No enclosing instance of type E  is accessible. 静态方法(main)中调用内部类,会出现这样的问题: 学习了:https://www.cnblogs.c ...

  8. [Python] Histograms for analysis Daily return

    A histogram is an accurate representation of the distribution of numerical data. Y axis is the occur ...

  9. [问题]HDOJ1032 The 3n + 1 problem

    http://acm.hdu.edu.cn/showproblem.php? pid=1032 这题能够用暴力求解.求出在[ni,nj]之间全部数字产生的最大值. 通过观察能够知道,当nk靠近nj的时 ...

  10. Design Pattern Adaptor 适配器设计模式

    适配器设计模式是为了要使用一个旧的接口,或许这个接口非常难用,或许是和新的更新的接口不兼容,所以须要设计一个适配器类,然后就能够让新旧的接口都统一. 就是这种一个图: watermark/2/text ...