关于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了。。。
至于更复杂的命令,我们还是查看官方文档吧。。。