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

问题描述 投票:0回答:3

我在 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()
并检查待处理迁移的数量,但我不确定这是否是在实体框架中进行此类检查的最安全方法:

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

       demoTapeDbContext.Database.Migrate();
   }
}
c# .net-standard ef-core-2.1
3个回答
18
投票

您是正确的,您应该使用

GetPendingMigrationsAsync
方法。来自文档

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

如果您查看代码,您可以追踪它是如何工作的。它获取程序集中定义的所有迁移,并删除通过查询数据库找到的迁移。


9
投票

我在

DbInitializer
中使用以下代码:

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

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

0
投票

如果您将此行用于 sqlserver 的单个实例

然后不要在 LaunchSetting.json 的连接字符串中使用 --> MultipleActiveResultSets

它不会引发以下异常:Microsoft.Data.SqlClient.SqlException:

© www.soinside.com 2019 - 2024. All rights reserved.