首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dotnet迁移自动化:检测迁移的更改

dotnet迁移自动化:检测迁移的更改
EN

Stack Overflow用户
提问于 2017-07-16 21:39:39
回答 2查看 1.7K关注 0票数 10

对于DB迁移,我使用以下CLI:

  1. dotnet ef migrations add <Name-of-Migration>
  2. dotnet ef database update

但是,我正在寻找一种自动发生这种情况的方法:当检测到模型中的更改时。

到目前为止,通过在Startup.cs中执行以下操作,我已经能够消除步骤2:

代码语言:javascript
复制
 private void SetupDatabase(IApplicationBuilder app)
    {
        using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
        {
            var context = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
            //Migate any pending changes:
            context.Database.Migrate();
        }
    }

这将迁移in:dotnet ef migrations add <Name-of-Migration>创建的任何挂起的更改,但它不会为模型中的任何更改添加迁移。如何使这个migrations add自动化

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-20 01:00:00

更新的:从代码自动生成迁移的第一步是可能的,这是我个人不同意的设计决策。它在您的目标EF7中仍然是不可能的,正如我最初所说的(它似乎已经从EF7中移除了在这篇文章里,也被Ivan在评论中提到的微软EF团队成员这篇博客文章上删除了),但是在马丁回复之后在EF6中进行了测试。第二步可以自动完成,因为你已经知道了,所以我不会再重复了。

第一步的步骤如下(在ASP.net MVC Web应用程序和EF6中):

  1. 在您的项目(应该已经与某些模型一起运行并处于一致状态)中,转到包管理器控制台并运行Enable-Migrations –EnableAutomaticMigrations。如果您的应用程序有单个DB上下文,那么它也在其中应用了更改。
  2. 现在转到一个现有的模型,在那里添加一个新的字段,例如public String TestField { get; set; }
  3. 由于启动了代码第一次自动迁移,您不需要再次运行Add-Migration命令(希望,正如我在后面的回答中指出的那样),您只需运行Update-Database,并且应该更新DB,允许应用程序正常运行。

为什么自动模型更改监视以自动生成和更新数据库()可能会适得其反,有时(在我看来是从MSDN页面那里):

  • 按照MSDN,在改变字段重命名时,自动迁移是行不通的。
  • 在添加原始字段类型的情况下,需要考虑现有数据,并且在此场景中应考虑手动迁移。
  • 您可以分散使用自动迁移和基于代码的迁移,但在团队开发场景中不推荐这样做。如果您是使用源代码管理的开发人员团队的一部分,则应该使用纯自动迁移或纯基于代码的迁移。鉴于自动迁移的局限性,MSDN建议在团队环境中使用基于代码的迁移。
  • 确认模型更改是故意的,而不是在进行更改时遗留代码造成的,这是很好的,可能发生的事情和自动化整个过程可能会滑到DB中。
  • 由于某些数据限制或类似的问题,生成的迁移并不总是经过优化和/或失败,因此应该进行审查。
  • 即使是update数据库也为我们超时了生产数据,在某些情况下,当迁移处理了大量数据时。然后我们必须手动远程运行它并重新启动服务器。

以上可能并不适用于每个人,但我认为应该分享为什么我同意不将迁移到DB的生成和应用程序自动化的设计决策。

每个考虑启用自动迁移的人都应该阅读MSDN页面以获得更多的示例和缺点。

票数 12
EN

Stack Overflow用户

发布于 2017-07-25 07:51:34

实体框架4.3引入了自动迁移

虽然我同意哈桑的回答,说这可能是非常棘手的,但这一选择实际上是存在的。

这是一份简短的简历:

  1. 启用迁移时,必须在Package控制台中提供一个参数:

启用-迁移-EnableAutomaticMigration:$true

  1. 将自动生成一个配置类: 公共配置(){ AutomaticMigrationsEnabled = true;//如果希望在从实体中删除属性时允许自动迁移删除数据,则将此参数设置为true。//不设置此设置将导致迁移应删除列时的异常。AutomaticMigrationDataLossAllowed = true;}
  2. 在上下文类中设置DB初始化程序 Database.SetInitializer(新MigrateDatabaseToLatestVersion("MyConnectionString"));

就这样,改变你的模式,看看变化.

我仍然不确定我是否会使用它,因为我希望我的数据库在我说的时候改变.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45133532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档