• 关于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了。。。

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

  • 相关阅读:
    java.lang.NoClassDefFoundError: org/apache/poi/ss/formula/udf/UDFFinder
    IntelliJ使用指南—— 深入了解IntelliJ的Web部署逻辑
    javascript深入理解js闭包
    git commit -F时用到的commit.log模板
    github上需要生成密钥对:ssh key
    windows和linux字体库位置
    .vimrc配置文件
    iw交叉编译
    libnl和libopenssl,hostapd交叉编译
    linux中断
  • 原文地址:https://www.cnblogs.com/ArrowTip/p/CodeFirst_Migration.html
Copyright © 2020-2023  润新知