c# - 在 ASP.Net vNext 站点中,为什么在启动时会出现与迁移相关的异常?

标签 c# asp.net entity-framework-core

我没有定义迁移,但在长时间超时后,我仍然在启动时看到有关 __MigrationHistory 表的异常。

我的初始化代码如下所示:

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc();

  services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<DiContext>(options => options.UseSqlServer(Configuration.Get("ConnectionString")));
}

public void Configure(IApplicationBuilder app)
{
  var loggerFactory = (ILoggerFactory)app.ApplicationServices.GetService(typeof(ILoggerFactory));
  loggerFactory.AddProvider(
      new DiagnosticsLoggerProvider(
        new SourceSwitch("SourceSwitch", "Information"),
        new ConsoleTraceListener()));

  Trace.WriteLine("Configure.");

  app.UseDefaultFiles();
  app.UseStaticFiles();
  app.UseErrorPage();
  app.UseDatabaseErrorPage();
  app.UseMvc(routes =>
  {
    routes.MapRoute(
      name: "default",
      template: "{controller}/{action}/{id?}",
      defaults: new { controller = "Home", action = "Index" });
    });
}

异常:

Microsoft.Data.Entity.Query.EntityQueryExecutor Error: 0 : An exception occurred in the data store while iterating the results of a query.
System.Data.SqlClient.SqlException (0x80131904): Invalid object name '__MigrationHistory'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteReader()
   at Microsoft.Data.Entity.Relational.Query.QueryingEnumerable`1.Enumerator.MoveNext()
   at System.Linq.Enumerable.<SelectManyIterator>d__8`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at Microsoft.Data.Entity.Query.LinqOperatorProvider.<_TrackEntities>d__1`2.MoveNext()
   at Microsoft.Data.Entity.Query.EntityQueryExecutor.EnumerableExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()

最佳答案

原来罪魁祸首是 IApplicationBuilder.UseDatabaseErrorPage。启动时的上游 SQL 错误导致呈现 Microsoft.AspNet.Diagnostics.Entity 数据库错误页面。数据库错误页面总是查询数据库的迁移以检查是否有任何迁移挂起,触发迁移系统尝试在我的问题中产生异常的查询。

关于c# - 在 ASP.Net vNext 站点中,为什么在启动时会出现与迁移相关的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465631/

相关文章:

c# - 退出 WPF 应用程序的最佳做法是什么?

c# - 将 List 转换为 JSON 以填充表

c# - Entity Framework 代码优先 : how to add more props on model and update database?

.net - Asp.net core mvc 批准后更新

c# - 从 web api 返回 XML 更改字段名称

c# - 处理 KeyNotFoundException 的最佳方法

c# - Visual Studio 不访问类 asp.net 的实例

asp.net - Entity Framework - 对象 'PK_AspNetUserTokens' 依赖于列 'UserId'

c# - C#中的DataBinder.Eval

c# - 写入响应的 XML 文件包含页面 HTML