最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
EF中migration删除错数据表解决方法
时间:2022-06-25 08:52:00 编辑:袖梨 来源:一聚教程网
四个命令我们就不说了,说一下自动迁移和手动迁移的区别:
将Migration下的Configuration.cs文件中的AutomaticMigrationsEnabled 改为True,即开启了migration的自动迁移,自动迁移开启后,你输入命令update-database。发下程序会自动生成一个201403030033_AtuoMigration.cs的迁移文件,这个文件你从Migrations文件夹中是看不到的。说白了自动迁移就是程序会自动比较数据库,然后将代码中的改变,转换成数据库中的改变。
手动迁移就不用说了,add-migration +命名 就可以完成了,程序将在Migrations文件夹下生成相应的基架,用update-database即可以完成迁移。
了解完前面的问题,我们看看我遇到的问题。
运行程序的时候报错:
支持“EquipDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
这个意思是数据库模型发生了改变,可是我已经用了迁移,为什么还会改变呢?我的数据库中有两张表,一张userinfoes,一张是Equipments,我打开数据库发现Equipments被删除了。
再次使用自动迁移,会有提示:自动迁移未应用,有可能会导致数据丢失。加上-force强制执行后,Equipments出现了,但是UserInfoes又被删除了,反复就是删除这张,新增那张。
不用自动迁移,改为手动,生成的迁移基架,up和down方法都是空的,换言之,程序认为没有必要更新数据库。
神马原因呢?
找到我们的model中,我的model都是按照网上教程来写的Equipment.cs包括了equipment类,还有继承自 DbContext 的EquipDBContext;UserInfo.cs包括了UserInfo和继承自 DbContext的UserDBContext。
你发现问题了么?对的,我们有两个DbContext,但是指向的都是同一个数据库。当更新EquipDBContext的时候,Migration认为userInfoes的表是多余的,所以就把它给删了。UserDBContext也是如此。
到此我们才发现是被晚上的教程给坑了,正确的model类的写法是,建立一个Shared.cs的文件,将DbContext内容写到一个文件夹中,并命名为 工程名+DbContext:
代码如下 | 复制代码 |
1 namespace LQMS.Models 2 { 3 public class LQMSDBContext : DbContext 4 { 5 public LQMSDBContext() 6 : base("DefaultConnection") 7 { 8 9 } 10 public DbSet<UserInfo> UserInfos { get; set; } 11 public DbSet<Equipment> Equipments { get; set; } 12 } 13 } |
这样子我们就只拥有一个LQMSDBContext设备上下文,Migration就可以准确的识别改变了!
相关文章
- 原神欧洛伦怎么培养 原神欧洛伦培养攻略介绍 11-22
- 炉石传说跳费大哥德卡组怎么样 炉石传说跳费大哥德卡组推荐介绍 11-22
- 蛋仔派对曙光龙女芙瑞怎么样 11-22
- 原神恰斯卡怎么养成 11-22
- 光遇11.22免费魔法有什么 11-22
- 光遇11.22大蜡烛在哪里 11-22