1、EF Code First创建数据库

  新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。

  在程序包管理器控制台中执行以下语句,安装EntityFramework。

PM> Install-Package EntityFramework

  安装成功后,界面提示如下图:

  在新建的Portal控制台应用程序中添加两个实体类,代码结构如下:

  其中,类文件PortalContext.cs的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Data.Entity;
using System.Data.Entity.Infrastructure; using Portal.Entities;
using Portal.Mapping; namespace Portal
{
public class PortalContext : DbContext
{
static PortalContext()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());
} public DbSet<Province> Provinces { get; set; }
public DbSet<Category> Categories { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProvinceMap());
modelBuilder.Configurations.Add(new CategoryMap());
}
}
}

  在静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。

  代码执行后,生成的数据库:

2、EF Code First数据库迁移

2.1、生成数据库

  修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。

static PortalContext()
{
Database.SetInitializer<PortalContext>(null);
}

  1>、在程序包管理器控制台,执行语句:

PM> Enable-Migrations -EnableAutomaticMigrations

  执行成功后,Portal控制台应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。

namespace Portal.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<Portal.PortalContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
} protected override void Seed(Portal.PortalContext context)
{
// This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
}
}
}

  2>、在程序包管理器控制台,执行语句:

PM> Add-Migration InitialCreate

  执行成功后,在Migrations文件夹中新增类文件201309201556388_InitialCreate.cs

  3>、在程序包管理器控制台,执行语句:

PM> Update-Database -Verbose

  执行结果生成与上面一致的数据库

  4>、在数据库模型中添加City类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件201309201643300_AddCity.cs。

PM> Add-Migration AddCity

  再次执行程序包管理器控制台语句

PM> Update-Database -Verbose

  Portal控制台应用程序的代码结构:

  数据库更新成功之后,在数据库中新增表City。

2.2、版本回溯

  修改数据库中表City,删除其中字段ProvinceNo。在程序包管理器控制台中执行以下两条语句:

PM> Add-Migration ModifyCity
PM> Update-Database -Verbose

  执行成功之后,City表结构修改为:

  执行程序包管理器控制台语句,进行数据库版本回溯。

PM> Update-Database –TargetMigration:"201309201643300_AddCity.cs"

2.3、生成数据库版本之间的Sql脚本

  执行程序包管理器控制台语句,生成数据库版本之间的Sql脚本。该操作仅为生成Sql语句,并未在数据库中进行执行。

Update-Database -Script -SourceMigration:"201309201643300_AddCity.cs" -TargetMigration:"201309201708043_ModifyCity.cs" 

  其中-TargetMigration在未指定的情况,默认为迁移到最新的版本。

3、EF Code First Migrations语句的其他参数

1>、为指定的DbContext启用数据库迁移

PM> Enable-Migrations -ContextTypeName Portal.PortalContext

2>、设置是否允许自动迁移

Enable-Migrations

生成的Configuration.cs类文件的构造函数

public Configuration()
{
AutomaticMigrationsEnabled = false;
}

3>、Enable-Migrations指定项目名称

PM> Enable-Migrations -StartUpProjectName Portal

如果在“Package Manager Console”中选择了默认项目可以不设置“-StartUpProjectName”参数;如果多次执行此命令可以添加-Force参数。

4>、查看所执行的Sql语句 -Verbose指令

Update-Database -Verbose 

4、代码下载

Portal.zip

5、参考资料

http://msdn.microsoft.com/en-US/data/jj591621

EF Code First Migrations数据库迁移 (转帖)的更多相关文章

  1. MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

    MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...

  2. EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  3. C# EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  4. 【EF】EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  5. EF Code First 更新数据库, 数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  6. EFCodeFirst Migrations数据库迁移

    EFCodeFirst Migrations数据库迁移 数据库迁移 1.生成数据库 修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置 ...

  7. EF Code First更新数据库时报错:provider: SQL Network Interfaces, error: 26

    在使用EF Code First更新数据库时报如下错误: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Serv ...

  8. c# EF code First生成数据库以及表

    1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句: PM> Insta ...

  9. Code First Migrations 数据迁移小记

    用了codefirst后一个很大的问题就是代码中的属性字段与数据库中表的同步问题,删掉数据库重新生成当然可以解决,不过数据就丢失了(当然通过代码中初始化数据库添加数据也可以解决,初始化的任务可以通过重 ...

随机推荐

  1. 一、final关键字

    final关键字修饰:类,方法,基本类型变量,引用,具有不同的意思 1.final修饰类 表示该类不能被继承 package property; public final class Hero ext ...

  2. Oracle数据库的“健康指示器”——事件(events)

    Oracle数据库“赢在”在架构,这话还是有道理的,除了锁(lock)这个最大的架构上的“赢点”之外,Oracle事件(event)也是另外一个很重要的架构上的“赢点”,因为当今的Oracle数据库, ...

  3. 如何迭代pandas dataframe的行

    from:https://blog.csdn.net/tanzuozhev/article/details/76713387 How to iterate over rows in a DataFra ...

  4. POJ 1947 Rebuilding Roads 树形dp 难度:2

    Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 9105   Accepted: 4122 ...

  5. CF 459A && 459B && 459C && 459D && 459E

    http://codeforces.com/contest/459 A题 Pashmak and Garden 化简化简水题,都告诉平行坐标轴了,数据还出了对角线,后面两个点坐标给的范围也不错 #in ...

  6. 用MyEclipse JPA创建项目(一)

    MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于JPA的功能. 阅读本教程时,了解 ...

  7. MyEclipse WebSphere开发教程:WebSphere 8安装指南(二)

    [周年庆]MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] IBM为使用WebSphere测试应用程序的开发人员提供了免费的WebSphere Ap ...

  8. 201621123010《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...

  9. 电脑同时安装python2和python3, 如何实现切换使用

    由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼 ...

  10. 如何完全卸载 mysql 数据库

    有时候MySQL不能完全卸载,这时候必须通过一些途径删除掉注册表和一些残余的文件,然后才能重新安装才可以成功! 1.控制面板——>所有控制面板项——>程序和功能,卸载mysql serve ...