Csharp/C#教程:在ASP.Net vNext站点中,为什么启动时会出现与迁移相关的exception?分享


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

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

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

 public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddEntityFramework() .AddSqlServer() .AddDbContext(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.d__8`2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at Microsoft.Data.Entity.Query.LinqOperatorProvider.d__1`2.MoveNext() at Microsoft.Data.Entity.Query.EntityQueryExecutor.EnumerableExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext() 

事实certificate,罪魁祸首是IApplicationBuilder.UseDatabaseErrorPage 。 启动时出现上游SQL错误导致Microsoft.AspNet.Diagnostics.Entity数据库错误页面呈现。 数据库错误页面始终查询数据库的迁移以检查是否有任何迁移未决,从而触发迁移系统尝试在我的问题中生成exception的查询。

如果使用ASP.NET 5 Starter Web模板创建项目,则ASP.NET Identity包含一个临时解决方法,以使用ApplicationDbContext构造函数中的Migrations自动创建其数据库:

 private static bool _created = false; public ApplicationDbContext() { // Create the database and schema if it doesn't exist // This is a temporary workaround to create database until Entity Framework database migrations // are supported in ASP.NET 5 if (!_created) { Database.AsMigrationsEnabled().ApplyMigrations(); _created = true; } } 

要禁用迁移,请删除其变通方法。 ?

否则,在EF7中,除非您的应用程序(或启动器模板)调用方法,否则我们永远不会运行迁移或任何其他数据库创建逻辑。

上述就是C#学习教程:在ASP.Net vNext站点中,为什么启动时会出现与迁移相关的exception?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1022444.html

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

精彩推荐