首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EFMigrationsHistory表为空

EFMigrationsHistory表为空
EN

Stack Overflow用户
提问于 2021-06-22 09:50:33
回答 1查看 161关注 0票数 1

我在debug中创建数据库。当数据库不存在时,我创建一个新的数据库:

代码语言:javascript
运行
复制
public static void Main(string[] args)                           
{                                                                
    var host = CreateHostBuilder(args).Build();                  
                                                                 
    using (var scope = host.Services.CreateScope())              
    {                                                            
        var services = scope.ServiceProvider;                    
                                                                 
        try                                                      
        {                                                        
            var context = services.GetService<LolDbContext>();   
                                                               
            context?.Database.EnsureCreated();                                                                  
            if (context.Database.CanConnect())
            {                                                    
                context.Database.Migrate();                      
            }                                                    
                                                                 
        }                                                        
        catch (Exception ex)                                     
        {                                                        
            var logger = services.GetRequiredService<ILogger>(); 
            logger.Error($"Exception while migrating db: {ex}"); 
        }                                                        
    }                                                            
                                                                 
    host.Run();                                                  
}                                                                

在应用程序启动后,我得到了这个异常:

代码语言:javascript
运行
复制
[11:47:10 [Error] Exception while migrating db: Microsoft.Data.SqlClient.SqlException (0x80131904): There is already an object named 'Table' in the database.
   at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at Microsoft.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean isAsync, Int32 timeout, Boolean asyncWrite)
   at Microsoft.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String methodName)
   at Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade databaseFacade)
   at eSportsLab.LeagueOfLegends.Api.Frontend.Program.Main(String[] args) in D:\repos\lol-sumeron-app\LeagueOfLegends\Presentation\eSportsLab.LeagueOfLegends.Api.Frontend\Program.cs:line 32
ClientConnectionId:00b6a255-f82d-49b2-adf6-23b83d0aeb1b
Error Number:2714,State:6,Class:16

当我进入SSMS时,我可以看到已创建的数据库(包含表、数据,如预期的那样),但是表[__EFMigrationsHistory]是空的。在另一个数据库中,一切正常工作:

我的问题是,当我这样初始化DB时,为什么EF不跟踪迁移呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-22 18:06:39

短期内,如果使用迁移,则不应该使用EnsureCreated

官方EF核心文档的在运行时应用迁移部分包含以下警告

  • 不要在EnsureCreated()之前给Migrate()打电话。EnsureCreated()绕过迁移来创建架构,这会导致Migrate()失败。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68081333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档