【C#

来源:互联网 发布:淘宝店铺怎么免费推广 编辑:程序博客网 时间:2024/05/29 09:17
“/”应用程序中的服务器错误。支持“QlogEntities”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 支持“QlogEntities”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。源错误: 行 19:         public ActionResult Index()行 20:         {行 21:             return View(db.Qlogs.ToList());行 22:         }行 23: 源文件: e:\CSharp\EF\MvcQlog\MvcQlog\Controllers\HomeController.cs    行: 21 堆栈跟踪: [InvalidOperationException: 支持“QlogEntities”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。]   System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) +344   System.Data.Entity.Internal.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6() +67   System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) +110   System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() +273   System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c) +31   System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) +143   System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) +270   System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() +123   System.Data.Entity.Internal.InternalContext.Initialize() +42   System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +39   System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +137   System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() +38   System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +99   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +263   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58   MvcQlog.Controllers.HomeController.Index() in e:\CSharp\EF\MvcQlog\MvcQlog\Controllers\HomeController.cs:21   lambda_method(Closure , ControllerBase , Object[] ) +101   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +19   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +209   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27   System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +15   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49   System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +57   System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223   System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +15   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +49   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +44   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +15   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +54   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +44   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +12   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +11   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765045   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.6.1637.0

原因及解决方案:因为之前运行程序时已经创建了数据库了,而现在我们在对模型进行更改后,它无法完全将更改之后的模型映射到之前的数据库,所以会出错。从错误提示中已经给出了解决办法。要么手动删除之前创建好的数据库,要么使用DropCreateDatabaseIfModelChanges 的一个实例来对数据库进行初始化。需要注意的一点是,在商业开发中,第二种方法要小心使用,因为它会把之前的数据库自动删掉重新创建,而如果你之前保存有大量信息在里面的话将无法挽回。

这里我们不想每次在修改模型之后都手动去删除,所以用第二种方法将十分简便,只需到Global.asax文件的Application_Start()方法里面添加如下一行即可。

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Http;using System.Web.Mvc;using System.Web.Routing;using System.Data.Entity;using MvcQlog.Models;namespace MvcQlog{    // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,    // 请访问 http://go.microsoft.com/?LinkId=9394801    public class MvcApplication : System.Web.HttpApplication    {        protected void Application_Start()        {            //清空上下文模型            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<QlogEntities>());            AreaRegistration.RegisterAllAreas();            WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            RouteConfig.RegisterRoutes(RouteTable.Routes);        }    }}

这样,模型改变之后,它会删除掉原来的数据库重新创建。




原创粉丝点击