在我们的项目中成功使用 Entity Framework 迁移。
但是现在我遇到了一个特殊情况,我需要更新一个需要一些业务逻辑的表(作为 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 中的迁移设置为完成。因此,应用程序可以启动,并在后台某处更新表格。
但并非如此,迁移似乎在线程运行时运行(这需要很多时间)。
所以我的相应问题:
- 在 DB迁移?
- 如果没有,我怎样才能在我的程序中完成自定义代码执行的需要 案件? (无需重写存储过程中的业务逻辑或 有点)
- 如果是,我做错了什么?如何在迁移中执行此代码而不阻止它?
最佳答案
DbMigration 上的 Up 和 Down 方法只是建立了一个内存模型,该模型稍后会转换为 SQL。您有两种执行自定义逻辑的选项:
- 使用 Sql 方法使用 T-SQL 在数据库服务器上执行您的逻辑。
- 在迁移配置类(通常是 Migrations\Configuration.cs)的 Seed 方法中执行逻辑。在更新数据库期间应用所有迁移之后调用此方法
关于c# - EF 迁移中的自定义代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374681/