【C# - Entity Framework】支持“QlogEntities”上下文的模型已在数据库创建后发生更改
2017-05-25 08:47
791 查看
“/”应用程序中的服务器错误。 支持“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);
}
}
}
这样,模型改变之后,它会删除掉原来的数据库重新创建。
相关文章推荐
- 支持“OdeToFoodDb”上下文的模型已在数据库创建后发生更改
- 支持“WeShopDb”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 支持“xxxContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 支持“xxx”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 支持“EFDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 支持“XXXDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=2
- 错误:支持“EFDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId
- 支持“XX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
- 关于MVC 更改字段时 提示支持“MovieDBContext”上下文的模型已在数据库创建后发生更改
- ASP.NET MVC 如何解决“上下文的模型已在数据库创建后发生更改”问题
- ASP.NET MVC 如何解决“上下文的模型已在数据库创建后发生更改”问题
- 创建数据库后支持的模型被更改,考虑使用代码优先更新数据库
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- 转载LINQ TO Entity 在数据库发生更改时更新实体数据模型 .edmx 文件
- LINQ TO Entity 在数据库发生更改时更新实体数据模型 .edmx 文件
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(二)
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(一)
- 用c#创建支持多语言的应用程序