c# - EF 迁移中的自定义代码执行

标签 c# .net entity-framework ef-code-first migration

在我们的项目中成功使用 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 中的迁移设置为完成。因此,应用程序可以启动,并在后台某处更新表格。

但并非如此,迁移似乎在线程运行时运行(这需要很多时间)。

所以我的相应问题:

  1. 在 DB迁移?
  2. 如果没有,我怎样才能在我的程序中完成自定义代码执行的需要 案件? (无需重写存储过程中的业务逻辑或 有点)
  3. 如果是,我做错了什么?如何在迁移中执行此代码而不阻止它?

最佳答案

DbMigration 上的 Up 和 Down 方法只是建立了一个内存模型,该模型稍后会转换为 SQL。您有两种执行自定义逻辑的选项:

  1. 使用 Sql 方法使用 T-SQL 在数据库服务器上执行您的逻辑。
  2. 在迁移配置类(通常是 Migrations\Configuration.cs)的 Seed 方法中执行逻辑。在更新数据库期间应用所有迁移之后调用此方法

关于c# - EF 迁移中的自定义代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374681/

相关文章:

c# - 如何/在何处查找 WPF 控件的 Microsoft 默认样式

c# - 如何使用 Entity Framework 正确建模自引用多父关系

c# - Fluent NHibernate 映射 IList<Point> 作为单列的值

c# - 访问 EF Core 中的相关表

c# - 在 ASP.NET MVC 中上传图像

c# - 合并 PDF iTextSharp

c# - 如何从代码隐藏属性中获取样式属性的值?

asp.net-mvc - 使用哪些技术来启动新项目? (技术视角)

postgresql - 可以使用 POSTGRESQL 在 Code First Entity Framework 中指定 JSONB GIN 索引吗?

c# - 添加通知图标后应用程序将不会在启动时启动