Heim > Datenbank > MySQL-Tutorial > Hauptteil

EF Code First Migrations数据库迁移

WBOY
Freigeben: 2016-06-07 14:59:48
Original
1298 Leute haben es durchsucht

1、EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。 在程序包管理器控制台中执行以下语句,安装EntityFramework。 PM Install-Package EntityFramework 安装成功后,界面提示如下图: 在新建的Portal控制台

1、EF Code First创建数据库

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

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

PM> Install-Package EntityFramework
Nach dem Login kopieren

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

EF Code First Migrations数据库迁移

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

EF Code First Migrations数据库迁移

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

<span>using</span><span> System;
</span><span>using</span><span> System.Collections.Generic;
</span><span>using</span><span> System.Linq;
</span><span>using</span><span> System.Text;

</span><span>using</span><span> System.Data.Entity;
</span><span>using</span><span> System.Data.Entity.Infrastructure;

</span><span>using</span><span> Portal.Entities;
</span><span>using</span><span> Portal.Mapping;

</span><span>namespace</span><span> Portal
{
    </span><span>public</span> <span>class</span><span> PortalContext : DbContext
    {
        </span><span>static</span><span> PortalContext()
        {
            Database.SetInitializer(</span><span>new</span> DropCreateDatabaseIfModelChanges<portalcontext><span>());
        }

        </span><span>public</span> DbSet<province> Provinces { <span>get</span>; <span>set</span><span>; }
        </span><span>public</span> DbSet<category> Categories { <span>get</span>; <span>set</span><span>; }

        </span><span>protected</span> <span>override</span> <span>void</span><span> OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(</span><span>new</span><span> ProvinceMap());
            modelBuilder.Configurations.Add(</span><span>new</span><span> CategoryMap());
        }
    }
}</span></category></province></portalcontext>
Nach dem Login kopieren

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

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

 EF Code First Migrations数据库迁移

2、EF Code First数据库迁移

2.1、生成数据库

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

<span>static</span><span> PortalContext()
{
    Database.SetInitializer</span><portalcontext>(<span>null</span><span>);
}</span></portalcontext>
Nach dem Login kopieren

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

PM> Enable-Migrations -EnableAutomaticMigrations
Nach dem Login kopieren

 EF Code First Migrations数据库迁移

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

EF Code First Migrations数据库迁移

<span>namespace</span><span> Portal.Migrations
{
    </span><span>using</span><span> System;
    </span><span>using</span><span> System.Data.Entity;
    </span><span>using</span><span> System.Data.Entity.Migrations;
    </span><span>using</span><span> System.Linq;

    </span><span>internal</span> <span>sealed</span> <span>class</span> Configuration : DbMigrationsConfiguration<portal.portalcontext><span>
    {
        </span><span>public</span><span> Configuration()
        {
            AutomaticMigrationsEnabled </span>= <span>true</span><span>;
        }

        </span><span>protected</span> <span>override</span> <span>void</span><span> Seed(Portal.PortalContext context)
        {
            </span><span>//</span><span>  This method will be called after migrating to the latest version.

            </span><span>//</span><span>  You can use the DbSet<t>.AddOrUpdate() helper extension method 
            </t></span><span>//</span><span>  to avoid creating duplicate seed data. E.g.
            </span><span>//</span>
            <span>//</span><span>    context.People.AddOrUpdate(
            </span><span>//</span><span>      p => p.FullName,
            </span><span>//</span><span>      new Person { FullName = "Andrew Peters" },
            </span><span>//</span><span>      new Person { FullName = "Brice Lambson" },
            </span><span>//</span><span>      new Person { FullName = "Rowan Miller" }
            </span><span>//</span><span>    );
            </span><span>//
</span><span>        }
    }
}</span></portal.portalcontext>
Nach dem Login kopieren

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

PM> Add-Migration InitialCreate
Nach dem Login kopieren

EF Code First Migrations数据库迁移

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

EF Code First Migrations数据库迁移

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

PM> Update-Database -Verbose
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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

EF Code First Migrations数据库迁移

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

PM> Add-Migration AddCity
Nach dem Login kopieren

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

PM> Update-Database -Verbose
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

EF Code First Migrations数据库迁移

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

EF Code First Migrations数据库迁移

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

EF Code First Migrations数据库迁移

2.2、版本回溯

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

PM> Add-Migration ModifyCity
Nach dem Login kopieren

PM> Update-Database -Verbose
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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

EF Code First Migrations数据库迁移

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

PM> Update-Database –TargetMigration:<span>"</span><span>201309201643300_AddCity.cs</span><span>"</span>
Nach dem Login kopieren

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

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

Update-Database -Script -SourceMigration:<span>"</span><span>201309201643300_AddCity.cs</span><span>"</span> -TargetMigration:<span>"</span><span>201309201708043_ModifyCity.cs</span><span>"</span> 
Nach dem Login kopieren

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

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

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

PM> Enable-Migrations -ContextTypeName Portal.PortalContext
Nach dem Login kopieren

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

Enable-Migrations
Nach dem Login kopieren

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

<span>public</span><span> Configuration()
{
      AutomaticMigrationsEnabled </span>= <span>false</span><span>;
}</span>
Nach dem Login kopieren

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

PM> Enable-Migrations -StartUpProjectName Portal
Nach dem Login kopieren

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

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

Update-Database -Verbose 
Nach dem Login kopieren

4、代码下载

Portal.zip

5、参考资料

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!