EF Code First 数据迁移

背景:

EF Code First在经历新业务或者业务逻辑变更时,可能会遇到数据库的更改,比如新增表

,更改表加字段,等等。这个时候,删除原来的数据库重建会丢失数据。

方案1:

如果初次开发,可以选择删除重建。

代码:

public TestDbContext()
: base("Name=TestConnection")
{
Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChanges<TestDbContext>());
}

方案2:

使用EF代码迁移工具。

1,通过NugGet向项目添加EF,同时系统会添加一个迁移工具

2,Web.config或App.Config配置很重要,迁移工具会根据<entityFramework>节点寻找需要更新的数据库,如果是<defaultConnectionFactorytype="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">会寻找本地数据库,如果是<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" >会寻找远程数据库。当然这里还可以有其他配置,比如Oracle的配置。

3,自定义的DbContext的无参数构造函数必须指定连接串:

public class TestDbContext : DbContext
{

public TestDbContext()
: base("Name=TestConnection")
{
Database.SetInitializer<TestDbContext>(new DropCreateDatabaseIfModelChanges<TestDbContext>());
//Database.SetInitializer<TestDbContext>(null);
}

迁移工具会根据这个构造函数寻找数据库连接,默认的连接串为VS的MSLoaclDb数据库实例,这个地方需要注意。

4,准备好之后就可以开始迁移了,打开程序包管理器控制台。分三步输入指令:(示例如下)

PM> Enable-migrations
正在检查上下文的目标是否为现有数据库...
已为项目 MvcTestKO 启用 Code First 迁移。
PM> Add-Migration v1
正在为迁移“v1”搭建基架。
此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration v1”重新搭建基架。
PM> Update-Database
指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句。
正在应用显式迁移: [201903300817195_v1]。
正在应用显式迁移: 201903300817195_v1。

说明:

Enable-migrations后会生成一个迁移文件夹,里面会记录版本更迭状况

public partial class v1 : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.TestChilds",
                c => new
                    {
                        Id = c.String(nullable: false, maxLength: 128),
                        createTime = c.DateTime(nullable: false),
                    })
                .PrimaryKey(t => t.Id);

        }

        public override void Down()
        {
            DropTable("dbo.TestChilds");
        }
    }
    public partial class v2 : DbMigration
    {
        public override void Up()
        {
            AddColumn("dbo.TestChilds", "Name", c => c.String());
        }

        public override void Down()
        {
            DropColumn("dbo.TestChilds", "Name");
        }
    }

Add-Migration v1 添加一个命名为v1的版本,添加好后会生成一个名叫 201903300817195_v1.cs的类。

PM> Update-Database 将迁移更新到数据库。更新完后,查看数据库会有更新 ,并且数据库的[__MigrationHistory]表会有相应的记录。

原文地址:https://www.cnblogs.com/cooolyuxyz/p/10629531.html

时间: 2024-08-10 21:24:39

EF Code First 数据迁移的相关文章

EF code First数据迁移学习笔记(转)

转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper),也就是code first中的code.建好之后,Ctrl+Shift+B生成项目.(不生成的话,会出现控制器找不到类型或者其他报错) 3.在app.config或web.config的configuration

EF code First数据迁移学习笔记

准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper),也就是code first中的code.建好之后,Ctrl+Shift+B生成项目.(不生成的话,会出现控制器找不到类型或者其他报错) 3.在app.config或web.config的configuration下添加节点connectionStrings: <connectionStrings>

MVC 使用EF Code First数据迁移之添加字段

PM> add-migration 20161109正在为迁移“20161109”搭建基架.此迁移文件的设计器代码包含当前 Code First 模型的快照.在下一次搭建迁移基架时,将使用此快照计算对模型的更改.如果对要包含在此迁移中的模型进行其他更改,则您可通过再次运行“Add-Migration 20161109”重新搭建基架.PM> update-database指定“-Verbose”标志以查看应用于目标数据库的 SQL 语句.正在应用显式迁移: [201611090641341_20

图文详解 解决 MVC4 Code First 数据迁移

在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题  这时可以删除数据库重新生成解决 但是之前的数据就无法保留  为了保留之前的数据库数据  我们需要使用到Code first数据迁移 首先如果需要更改数据结构  必须是先更改model类 然后使用Code firs数据迁移  如果直接先更改了数据库 则使用数据迁移会报错 使用Code firs数据迁移图解 工具-->库文件包程序管理器-->程序包管理控制台  如图 注意观察 默认项目  和程序包源 因

Code First 数据迁移 转

一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations”  或者 Enable-Migrations -ContextTypeName Mvc.Models.DataContext Enable-Migrations -ContextTypeName 命名空间.上下文名称 注:如果正确的话 则显示“已为项目 xxx启用 Code First 迁移.”, Enable-Migrations命令创建了一

C#+EntityFramework编程方式详细之Code First 数据迁移

在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式,其中Model First以及Dtatabase First中,如果实体类(Model First)或者数据库(Dtatabase First)变化了,那么就需要数据库(Model First)或者实体类(Dtatabase First)来相应的变化,以保持实体类(Model First)和数据库(

EF架构~CodeFirst数据迁移与防数据库删除

回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的,第二个问题是数据迁移问题,当你有新的实体建立后,如何响应到数据库,这成为一个问题,当然实现也很简单,我们直接使用migrations工具即可. 一 防数据库删除 将你的业务DbInitializer的基类改成CreateDatabaseIfNotExists即可解决这个问题,这是在数据初始化时需要做

EntityFramework4.3.1 Code First 数据迁移

现有数据库生成Code First 代码,先下载 Entity Framework Power Tools https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d/ 如果找不到Nuget就先安装了,在工具-扩展管理器里直接安装.(如下图) 需要通过 NuGet 的 Package Manager Console 输入相关命令. Enable-Migrations -StartUpPro

EF Code First 数据库迁移Migration剖析

1.简介 Entity Framework 的Code First 方式,提供了一种方式:编写模型Model,生成模型变更,根据模型变更修改数据库. 而其所以来的环境就是强大的Nuget,如果还在是VS2010一下的同学,请不要往下看了,将无一益处.   2.操作步骤 1)建立或修改Model,即实体类:     这里演示修改: public class BootStrapLists { public int ID { get; set; } public string Title { get;