在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

posted @ 2015-06-15 21:52  朱永光  阅读(4287)  评论(6编辑  收藏  举报