关于EntityFramework的Migration

最近项目需要,用到了EF的Code First,开始的时候不知道,所以没有详细的搞,发现了几个问题,记录下来,以后看看:

1. 多对多表的时候,Configuration的配置是不能少的,找出对应表之间的主键,外键关系,通过Fluent Api进行配置,感觉还是蛮简单的。

1     modelBuilder.Entity<EquipmentClassPropertyType>()
2                 .HasMany(m => m.EquipmentCapabilityTestSpecification)
3                 .WithMany(m => m.TestedEquipmentClassProperty)
4                 .Map(m =>
5                 {
6                     m.ToTable("T_Equipment_EquipmentClassAndSpec");
7                     m.MapLeftKey("EquipmentClassPropertyID");
8                     m.MapRightKey("EquipmentCapabilityTestSepcID");
9                 });

 在两个对应类中均有对方的List,这样才能形成多对多关系;关键:对应类中不能有相同的外键,这样会导致新的问题的出现;

2. 关于配置文件:

  书写程序的时候,直接把数据的连接字符串链接的名称放到XXXContext中,可以节约N多功夫;

3. 就是关于数据的迁移变更问题了,刚开始,每次都干掉数据库,发现这是个问题啊,后来去看看了Migration,原来也是挺简单的;也就是几句代码的事,就是玩cmd命令一样,超级简单:

  

1 Enable-Migrations     // 启动数据库迁移
2 Add-Migration AddNewClass  // 增加的新的类,完成数据变更,但是此操作只是挂起操作
3 Update-Database             // 将挂起的操作写入数据库,实现变更
4 Update-Database -TargetMigration:$xxxx 
5                                 // 读取原有的变更参数,恢复原来的数据

当一个程序中有两个或者以上的Context时,需要设置对应的Context

1 Enable-Migrations -ContextTypeName Greatwall.MOM.Entity.DbContexts.CommonContext

如果编译器要更你对着干,那就简单,在后面补上一句: 

1 Enable-Migrations -ContextTypeName Greatwall.MOM.Entity.DbContexts.CommonContext -Force

对于大型项目,多个dll项目的时候,右边有一个设置,选择对应项目,这样,就不会提示你没有在项目中安装EntityFramework了。。。

至于更复杂的命令,我们还是查看官方文档吧。。。

原文地址:https://www.cnblogs.com/ArrowTip/p/CodeFirst_Migration.html