添加实体框架通过代码迁移
本文关键字:代码 迁移 实体 框架 添加 | 更新日期: 2023-09-27 18:13:23
我想知道是否有人知道如何通过c#代码添加迁移。
我对代码首次迁移有点陌生。
我一直在玩System.Data.Entity.Migrations.Design
的ToolingFacade
班。
使用这个类,我可以检测迁移,从一个迁移更新到另一个迁移,检测挂起的迁移。我也可以构建一个新的迁移,尽管我不知道如何将这个迁移"添加"到迁移文件夹中(处理模型中的更改)。
对于新创建的scaffold迁移,它的c#代码保存在属性中。理论上,我可以在迁移目录中创建一个文件,并将此代码添加到其中(然后使用此迁移更新数据库)。虽然挂起的模型更改没有在"up"answers"down"方法中输入。
我也尝试过在c#中使用power shell对象,使用Add-Migration命令等,但它们不被认为是已知的cmdlet
。
我要做的是相当于控制台命令:Add-Migration "MigrationName" -ProjectName "ProjectName" ....在c#中
感谢您的帮助
实体框架4.3运行迁移在应用程序启动没有回答我的问题。它们回答了如何使用现有迁移更新数据库。我想在更新之前添加一个新的迁移。代码
我已经尝试了您正在做的事情,但无法做到(尽管我已经设法通过代码获得了相当多的EF迁移内容)。结果我放弃了这个想法,因为这是个坏主意。迁移是在开发时创建的,甚至是预编译时。您正在尝试在应用程序运行时执行该操作。
即使您设法生成一个新的迁移,您将如何处理新的类?您需要能够重新编译项目,并使用新编译的dll在数据库上运行某种形式的Update-Database
。
还有,一个已部署的应用程序进行新迁移的原因是什么?新的迁移发生在您更改数据库模型之后,即添加在DbContext中引用的新类/属性。如果您的应用程序被编译并部署到客户机,这是如何发生的?
从你的评论中,我看到你实际上想要回滚不成功部署的迁移,而不是创建新的迁移-这是一个完全不同的故事,可以在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);
}
}
}
这是一个你可以拥有的方法,所以你可以从你的代码的其他部分调用它