在EF Core中,如何检查是否需要迁移?

时间:2019-01-24 23:35:51

标签: c# .net-standard ef-core-2.1

我在Xamarin.iOS应用程序中使用Entity Framework Core。

在包含iOS应用程序和其他应用程序之间共享的代码(.netstandard 2.0)的核心项目中,我想知道是否需要迁移,以便我也可以执行其他一些操作。

这里是上下文:

public void Initialize()
{
   using (var dbContext = new MyDbContext(m_dbContextOptions))
   {
       --> bool isNeeded = demoTapeDbContext.Database.IsMigrationNeeded()

       demoTapeDbContext.Database.Migrate();
   }
}

我发现最接近的方法是调用方法GetPendingMigrationsAsync()并检查挂起的迁移量,但是我不确定这是否是在Entity Framework中进行这种检查的最安全方法:

public async Task InitializeAsync()
{
   using (var dbContext = new MyDbContext(m_dbContextOptions))
   {
       bool isMigrationNeeded = (await demoTapeDbContext.Database.GetPendingMigrationsAsync()).Any();

       demoTapeDbContext.Database.Migrate();
   }
}

2 个答案:

答案 0 :(得分:2)

我在 DbInitializer 中使用以下代码:

public static class DbInitializer
{
    public static void Initialize(ApplicationDbContext context)
    {

        if(context.Database.GetPendingMigrations().Any()){
            context.Database.Migrate();
        }
        ...

答案 1 :(得分:1)

您正确的使用了GetPendingMigrationsAsync方法。来自the docs

  

异步获取程序集中定义但尚未应用到目标数据库的所有迁移。

如果您查看the code,则可以跟踪它的工作方式。如果获取了程序集中定义的所有迁移,并通过查询数据库删除了发现的迁移。