【问题标题】:Add Entity Framework Migration Through Code通过代码添加实体框架迁移
【发布时间】:2015-09-18 12:14:52
【问题描述】:

我想知道是否有人知道如何通过 c# 代码添加迁移。

我对代码优先迁移有点陌生。

我一直在玩 System.Data.Entity.Migrations.DesignToolingFacade 类。

通过这个类,我可以检测迁移、从一个迁移更新到另一个迁移、检测挂起的迁移。我也可以构建一个新的迁移,虽然我不知道如何将此迁移“添加”到迁移文件夹(处理模型中的更改)。

对于新创建的脚手架迁移,用于此的 C# 代码保存在一个属性中。理论上我可以在迁移目录中创建一个文件并将此代码添加到其中(然后使用此迁移更新数据库)。尽管未在“up”和“down”方法中输入待定模型更改。

我也尝试过在 C# 中使用 power shell 对象,使用 Add-Migration 命令等,但它们不被识别为已知的cmdlet

我想要做的是控制台命令的等价物:Add-Migration "MigrationName" -ProjectName "ProjectName" .... in c#

任何帮助表示赞赏

Entity framework 4.3 run migrations at application start 不回答我的问题。他们回答了如何使用现有迁移更新数据库。我想在更新之前添加一个新的迁移。按代码

【问题讨论】:

  • 您是否尝试过从 NuGet 包管理器控制台运行 enable-migrations
  • 迁移已启用 - 我可以通过包管理器控制台(Add-Migration、Update-Datbase 等)执行 power shell 命令,但这不是我想要的。我正在寻找通过代码处理这些命令。
  • 不..不是。我见过这个问题。他们回答了如何使用现有迁移更新数据库。我想在更新之前添加一个新的迁移。按代码

标签: c# database entity-framework entity-framework-migrations powershell-cmdlet


【解决方案1】:

我已经尝试过您正在做的事情但无法做到(尽管我已经设法通过代码获得了很多 EF 迁移的东西)。结果我放弃了这个想法,因为这是一个坏主意。迁移是在开发时创建的,甚至是在预编译时创建的。您正在尝试在应用程序运行时执行该操作。

即使您设法生成了新的迁移,您打算如何处理新类?您需要能够重新编译您的项目并使用新编译的 DLL 在您的数据库上运行某种形式的Update-Database

另外,已部署的应用程序进行新迁移的原因是什么?更改数据库模型后会发生新的迁移,即添加在 DbContext 中引用的新类/属性。如果您的应用程序被编译并部署到客户端,怎么会发生这种情况?

从您的 cmets 中,我看到您实际上希望在部署不成功时回滚迁移,而不是创建新的迁移 - 这是一个完全不同的故事,可以在 C# 中完成(让我知道您是否正在寻找,我给你挖出这段代码)。

【讨论】:

    【解决方案2】:
    Add-Migration [MigrationName]
    

    如果需要指定域目标:

    Add-Migration [MigrationName] -ConfigurationTypeName [ProjectName.Web.Migrations.Configuration]
    

    好吧,根据您的应用和实体配置,您可以使用如下方法:

    namespace APP.Migrations
    {
        internal class ManualConfiguration : Configuration
        {
            public void ManualSeed(EntitiesDbContext context)
            {
                this.AutomaticMigrationsEnabled = true;
                this.AutomaticMigrationDataLossAllowed = false;
    
                Database.SetInitializer(new MigrateDatabaseToLatestVersion<Entities.EntitiesDbContext, Configuration>());
    
                Seed(context);
            }
        }
    }
    

    这是您可以拥有的方法,因此您可以从代码的另一部分调用它

    【讨论】:

    • 感谢您的回复,我不希望通过 power shell 命令执行此操作。我知道如何通过这些命令进行迁移,并且在我执行此操作时它可以工作(通过包管理器控制台)。我正在寻找从 c# 执行 power shell 命令.. 或从 EF 类中找到另一个允许我添加迁移的等效方法 EF 中的 ToolingFacadde 类允许我管理迁移,但我似乎找不到添加一个方法新的。
    • 你可以通过网址来实现吗?你有一个网络应用程序?
    • 不抱歉,它是一个桌面应用程序。我们可以将数据库初始化程序保留为自动迁移 (MigrateDatabaseToLatestVersion),但我希望对此进行更多控制。我希望能够恢复到不同的迁移,例如新迁移失败。我需要通过代码来完成这项工作,因为我们不会有数据库管理员来处理数据库更改、输入 power-shell 命令或执行生成的脚本。
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2018-11-17
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多