你的位置:首页 > ASP.net教程

[ASP.net教程]在Entity Framework 7中进行数据迁移


(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:虽然EF7重新设计了Entity Framework,不过也还是能够支持数据迁移的。

Entity Framework 7是微软ORM框架的一次重生,变得更加轻量级。因而默认情况是没有开启数据迁移(Migration)功能的,也即创建出来的数据库默认不会包含“__MigrationHistory”表。在这种情况下,数据模型的变更,需要你手动(通过SQL脚本)去修改对应的数据库结构。当然,你还是可以启用自动的数据迁移功能的。

Mostafa Asaduzzaman在CodeProject上分享了一篇文章,图文并茂的讲解了如何在Entity Framework 7中进行数据迁移。大致步骤如下:

1,在project.json中引用EntityFramework.Commands包

  1: "EntityFramework.Commands": "7.0.0-beta4"


2,在project.json中添加“ef”的命令:

  1: "commands": {
  2:    "ef": "EntityFramework.Commands"
  3:  },


3,变更数据模型之后,在项目文件夹中执行如下命令来添加新的迁移代码:

  1: dnx . ef migration add newBook


4,运行迁移代码:

  1: dnx . ef migration apply


更详细的内容,可以“阅读原文”。就我自己的实践经验而言,有几点可以分享给大家:

  1. 现在Migration的命令不是EF6之前那样在Package Manager Console中运行了,而是在dnx命令下运行
  2. 如果dnx命令无效,那么可能是没有执行“dnvm use”
  3. 如果之前没有启用Migration,最好打算开始迁移之前执行一次“dnx . ef migration add InitialCreate”来添加一个类似之前的初始迁移
  4. 如何不想通过命令来应用迁移或者说想在代码中自动应用迁移,那么可以创建如下这样的方法,在Startup中的Configure方法中调用
  1: public static void Init(IServiceProvider serviceProvider)
  2: {
  3:   using (var db = serviceProvider.GetService<LibraryDbContext>())
  4:   {
  5:     var sqlDb = db.Database as SqlServerDatabase;
  6:     if (sqlDb != null)
  7:     {
  8:       try
  9:       {
 10:         sqlDb.ApplyMigrations();
 11:       }
 12:       catch (Exception ex)
 13:       {
 14:         Trace.TraceError(ex.Message);
 15:         throw;
 16:       }
 17:     }
 18:   }
 19: }


原文链接:http://www.codeproject.com/Tips/988763/Database-Migration-in-Entity-Framework