• ABP Migration(数据库迁移)


          今天准备说说EntityFramework 6.0+,它与我之前所学的4.0有所区别,自从4.1发布以来,code first 被许多人所钟爱,Dbcontext API也由此时而生。早在学校的

    时候就听老师说过Db first,Model first 和 Code first ,没怎么去注意,最近我直接从Db first 跳到了 Code first,去了解了下,个人觉得Model first 和 Code first 没多

    大区别,英文好的人看以看看http://stackoverflow.com/questions/5446316/code-first-vs-model-database-first,在这里我也稍微解释下,code first 最大优点就是

    代码干净简洁,可以使用代码完全控制数据库相关的操作,而不需要到管理系统里面建库建表,也没有那些EntityFramework 4.0里面的那些自动生成的XML文件(看着就头

    疼,因为不是自己写的代码),改完下表又得重新搭建一下实体框架(真的很麻烦啊)。但是任何强大的东西都有其一定的弊端,正因为使用如此简单,所以容易造成数据的丢

    失,特别是像我这种从Db frist 直接跳到 code first 的人如果没有特别了解,就去跟那些已经使用EF6的人一起做事。这些不是重点,重点Migration(数据库迁移),

    数据库迁移对于企业级应用程序来说是再正常不过了吧。拿我们Abp的例子来说吧,首先到ABP官网下载项目https://github.com/aspnetboilerplate,双击那个NuGet包管

    理.exe,使用VS2012+打开项目, 在VS工具栏里找到工具==》Nuget程序包管理器==》程序包管理器控制台,先注意看控制台上面的默认项目是不是EntityFramework层,

    如果不是则选择它,

    ,改成下面这样

    在控制台里面输入:Install-Package EntityFramework 命令,

    这样最新版的EF就安装到了你的EntityFramework层,是不是很简单,然后建表,先改下你的配置文件

    当然不改的话也是可以的,但是不安全,例子给的是信任连接,也就是说不需要用户名和密码就可以进到你的数据库,然后又到了输入命令的时候了,

    如果确定命令没有输入错误,找3个点

    1.默认项目是不是EntityFramework,

    2.启动项目是不是UI层,

    3.如果前面两个都没问题,那么请关掉VS,重新打开项目,

    让VS重新加载下项目,不要问我为什么,我也不知道(大神告诉我的),只能自己去猜测。注意看我用红线画出来的东西,等下告诉你为什么 ,这样表就建好了,

    ,那个People表是根据我们例子里面的Person类生成的,

    看到那个Table特性,就知道为什么生成的表名是People了,凡是加上Table特性的实体类,在运行Update-database命令的时候就会生成对应的表,它的实现原理是反射,

    至于刚才那个seed方法是什么意思呢,

    打开那个Migration文件夹,看到里面的Configuration.cs , 左边那个Seed方法,每次更新数据库最后都会执行这个方法,可以在这里写代码增加记录等等,最后要说说那个Migration了,

    首先看到上面那个Configuration.cs里面的Configuration方法里面有个AutomaticMigrationEnable属性,此时它是false,也就是说此时是不允许自动迁移的,当然这个Migration文件

    夹是之前就加上去的,我们先把它删除掉,

    ,没有了,运行命令Add Migration InitialCreate 

    看到没有,报错了,错误消息是没有找到迁移配置,这时候我们需要先启动迁移,执行命令:Enable-Migrations

     ,

    Migration文件夹又神奇的出现了,再运行:Add-Migration InitialCreate命令,注意那个InitialCreate,

    看到右边那个Migration文件夹里多了一个2015...InitialCreate,看到这里懂了吧,然后我贴一段我从网上找到的图

    这个命令我还没用过,不过应该没什么问题。演示用的项目到Github里面去下载,地址:https://github.com/aspnetboilerplate ,我也是初学者,有问题一起探讨,大神请指教。

  • 相关阅读:
    log日志框架和LocationAwareLogger问题
    Eclipse 各种小图标的含义
    自定义log4j日志级别
    在Tomcat配置JNDI数据源的三种方式
    mybatis中"#"和"$"的区别
    Postman用法简介-Http请求模拟工具
    mustache模板技术(转)
    VS的编译选项
    Java Service Wrapper简介与使用
    还活着
  • 原文地址:https://www.cnblogs.com/shellphen/p/4645891.html
Copyright © 2020-2023  润新知