在我们的项目中成功使用实体框架迁移。但是现在我遇到了一个特殊情况,我需要更新需要一些业务逻辑的表(作为 C# 代码位于我们的应用程序中)。因此,我尝试在迁移Up
方法中生成一个线程,并使用业务逻辑进行此表更新。应用程序执行不需要此表更新,应在后台进行。
我这样做有点像这样:
public partial class MyMigration : DbMigration
{
public override void Up()
{
// ... do some sql migration here ...
// after executing the sql migrations custommethod should run
// migration seems to wait until CustomMethod finished work
new Thread(() => ExecuteCustomMethodDatabaseContext()).Start();
}
}
我希望该Up
方法在启动线程后返回,并且 EF 将 MigrationHistory 中的迁移设置为完成。因此,应用程序可以启动,并且在后台某处更新表格。
但并非如此,迁移似乎在线程运行时运行(这需要很多时间)。
所以我的相应问题:
- 在 DBmigrations 中执行自定义代码通常是一种好习惯吗?
- 如果没有,在我的情况下,如何实现自定义代码执行的需要?(无需重写存储过程中的业务逻辑或在某种程度上)
- 如果是,我做错了什么?如何在迁移中执行此代码而不阻塞它?