C# 通过代码添加实体框架迁移

C# 通过代码添加实体框架迁移,c#,database,entity-framework,entity-framework-migrations,cmdlet,C#,Database,Entity Framework,Entity Framework Migrations,Cmdlet,我想知道是否有人知道如何通过c代码添加迁移 我对代码优先迁移有点陌生 我一直在玩System.Data.Entity.Migrations.Design中的ToolingFacade类 使用这个类,我可以检测迁移,从一个迁移到另一个迁移的更新,检测挂起的迁移。我还可以构建一个新的迁移,尽管我不知道如何将这个迁移“添加”到migrations文件夹中(处理模型中的更改) 通过新创建的scaffold迁移,该迁移的C#代码保存在一个属性中。理论上,我可以在migrations目录中创建一个文件,并将

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

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

我一直在玩
System.Data.Entity.Migrations.Design
中的
ToolingFacade

使用这个类,我可以检测迁移,从一个迁移到另一个迁移的更新,检测挂起的迁移。我还可以构建一个新的迁移,尽管我不知道如何将这个迁移“添加”到migrations文件夹中(处理模型中的更改)

通过新创建的scaffold迁移,该迁移的C#代码保存在一个属性中。理论上,我可以在migrations目录中创建一个文件,并将此代码添加到其中(然后使用此迁移更新数据库)。尽管未在“向上”和“向下”方法中输入挂起的模型更改

我还尝试在C#中使用powershell对象,使用Add Migration命令等,但它们没有被识别为已知的
cmdlet

我要做的是等效于控制台命令:addmigration“MigrationName”-ProjectName“ProjectName”。。。。在c中#

谢谢你的帮助

没有回答我的问题。它们解决了如何使用现有迁移更新数据库的问题。我想在更新之前添加一个新的迁移。按代码

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);
        }
    }
}
命名空间应用程序迁移
{
内部类手册配置:配置
{
public void ManualSeed(EntitiesDbContext上下文)
{
this.AutomaticMigrationsEnabled=true;
this.AutomaticMigrationDataLossAllowed=false;
SetInitializer(新的MigrateDatabaseToLatestVersion());
种子(上下文);
}
}
}

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

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

即使您成功地生成了一个新的迁移,您将如何处理这些新类?您需要能够重新编译项目,并使用新编译的DLL在数据库上运行某种形式的
updatedatabase

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


从您的评论中,我看到您实际上希望在部署失败时回滚迁移,而不是创建新的迁移—这是一个完全不同的故事,可以用C#来完成(如果这是您想要的,请告诉我,我将为您挖掘此代码).

您是否尝试过从NuGet Package Manager控制台运行
启用迁移
?迁移已启用-我可以通过Package Manager控制台执行power shell命令(添加迁移、更新数据库等),但这不是我想要的。我正在寻找通过代码处理这些命令的方法。可能重复的没有。。不是。我见过这个问题。。它们解决了如何使用现有迁移更新数据库的问题。我想在更新之前添加一个新的迁移。通过代码感谢您的回复,我不希望通过powershell命令来实现这一点。。我知道如何通过这些命令进行迁移,当我这样做时(通过PackageManager控制台),它就会工作。我想从c#执行powershell命令。。或者从EF类中找到另一个等效方法,该方法允许我添加迁移EF中的ToolingFacade类允许我管理迁移,但我似乎找不到添加新迁移的方法。您可以通过url执行吗?你有一个web应用程序吗?不,对不起,这是一个桌面应用程序。。我们可以将数据库初始值设定项保留为自动迁移(MigrateDatabaseToLatestVersion),但我希望对此有更多的控制。我希望能够恢复到不同的迁移,例如,如果新迁移失败。我需要通过代码来完成这项工作,因为我们没有数据库管理员来处理数据库更改、输入powershell命令或执行生成的脚本。