请教错误:上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库

最近在尝试用ef做一个项目,有一些问请教大家。。

因为之前习惯了直接写sql来创建表,所以我现在也是先创建数据库,然后EF上下文中创建新的DbSet来访问新建的表。

比如:
public class PMDbContext : DbContext
{
public PMDbContext()
: base("ProjectManage")
{

}

public DbSet<User> Users
{ get; set; }
}

但这时运行会提示错误:
支持“PMDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

在网上查了一下解决方法,很复杂的迁移过程。
现在项目在开发期间,添加表,修改表是非常频繁的事情,难道我每次修改表或者添加一个表,都要这样重复一遍迁移过程吗?能不能跳过这个复杂的过程?
...全文
5012 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_38191849 2017-04-05
  • 打赏
  • 举报
回复
修改Global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Data.Entity;

namespace 项目名称
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer<Models.上下文名称>(null);
}
}
}
Amo_lt 2017-02-21
  • 打赏
  • 举报
回复
引用 12 楼 huchao007 的回复:
删除这个表[__MigrationHistory]就可以啦
你出来我们谈谈。。我删了之后就报错 无法检查模型兼容性,因为数据库不包含模型元数据。只能检查使用 Code First 或 Code First 迁移创建的数据库的模型兼容性。
吗搂 2017-01-16
  • 打赏
  • 举报
回复
在工具->库程序包管理器->程序包管理器控制台 窗口里运行 Add-Migration Initial 指令再输入Update-Database执行,拿走不谢
RhinoHu 2016-12-27
  • 打赏
  • 举报
回复
删除这个表[__MigrationHistory]就可以啦
lucifa7 2016-04-20
  • 打赏
  • 举报
回复
如果项目中存在两个以上Context:ApplicationDbContext是项目创建时自动创建的,如果在启用来自数据库的CodeFirst时重新生成了一个Context,并且启用了对其的Migration,则之后在使用MVC自带的Identity模块时

即修改这几个表对应的系统模型如IdentityRole等model
要切回ApplicationDbContext,同步数据库然后切回业务数据库Context(下例子中的ApplicationDbContext)
1 强制启用项目中的某个Context 并同步数据库:
Enable-Migrations -ContextTypeName LucifaOS.Models.ApplicationDbContext -force
add-migration xxx
update-database
2 切换回业务数据库上下文
Enable-Migrations -ContextTypeName LucifaOS.Models.LucifaData –force

**如果要使用已经存在的数据库+新的数据表,请在增加model和同步数据之前,强制取消现有数据的迁移
add-migration Initial -IgnoreChanges
update-database

咫尺沉浮 2015-09-25
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_e846c5270102vtab.html 参见我的博客
QQ465751963 2015-02-12
  • 打赏
  • 举报
回复
引用 2 楼 wggfcusmq 的回复:
解决了,把数据库中检测模型变化的表删除就可以了
引用 7 楼 liu_dashi 的回复:
太不厚道了,解决办法呢
donglong11 2015-02-01
  • 打赏
  • 举报
回复
// 如果您希望只要更改模型架构,Entity Framework // 就会自动删除并重新生成数据库,则将以下 // 代码添加到 Global.asax 文件中的 Application_Start 方法。 // 注意: 这将在每次更改模型时销毁并重新创建数据库。 System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MvcGuestbook.Models.MvcGuestbookContext>()); 就不会报错了
liu_dashi 2014-11-21
  • 打赏
  • 举报
回复
太不厚道了,解决办法呢
wlccomeon 2014-08-14
  • 打赏
  • 举报
回复
引用 2 楼 wggfcusmq 的回复:
解决了,把数据库中检测模型变化的表删除就可以了
怎么操作的?我也遇到这个问题了,求助啊!
programmer_xyl 2014-08-05
  • 打赏
  • 举报
回复
楼主删除了哪个表的数据
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
开发的时候不需要迁移,只要制定DropCreateDatabaseAlways,让它每次删除重新创建下就行。
因为有很多的基础数据,每次删除重建太麻烦。 还是把检测表删除来的省事。
threenewbee 2014-07-23
  • 打赏
  • 举报
回复
开发的时候不需要迁移,只要制定DropCreateDatabaseAlways,让它每次删除重新创建下就行。
  • 打赏
  • 举报
回复
解决了,把数据库中检测模型变化的表删除就可以了
yaotomo 2014-07-22
  • 打赏
  • 举报
回复
我都是删除原来的实体模型再新建一遍,这样来的比较快

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧