Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 711|回复: 0

EntityFramework5.0 数据迁移笔记--解决模型变化重建数据库的问题

[复制链接]
  • TA的每日心情
    奋斗
    7 天前
  • 签到天数: 745 天

    [LV.9]以坛为家II

    2041

    主题

    2099

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    704660
    发表于 2021-7-12 16:56:20 | 显示全部楼层 |阅读模式

           用了Codefirst后最大的困扰就是数据变化引起数据库的删除再新建,这样会造成数据丢失,musicstore中介绍的播种办法也只能满足下测试的需要。在EntityFrameWork5.0中引入了数据迁移功能能很好的解决这个问题。

           步骤一:

    需要EF5.0,最好用NuGet来安装。工具-->库程序包管理器-->程序包管理控制台(我用的VS2012)

     

       输入命令,安装最新的ef。如下

      

      输入get-help NuGet 可以查看其它的命令

    主题
        about_NuGet
        
    简短描述
    提供有关 NuGet 程序包管理器命令的信息。
               
    详细描述
    本主题介绍 NuGet 程序包管理器命令。NuGet 是集成的程序包
    管理工具,用于将库和工具添加到 .NET 项目。
    
                     
    包括了以下 NuGet cmdlets。
    
    Cmdlet                    描述
            ------------------        ----------------------------------------------
    Get-Package                获取程序包源中可用的程序包集。
    
    Install-Package                在项目中安装程序包及其依赖项。
    
    Uninstall-Package            卸载程序包。如果其他程序包依赖于此程序包,
                        则该命令将会失败,除非指定了 -Force 选项。
    
    Update-Package                将程序包及其依赖项更新为较新版本。
    
    Add-BindingRedirect            检查项目输出路径中的所有程序集,
                        并根据需要将绑定重定向添加到
                        应用程序(或 Web)配置文件。
                                
    Get-Project                为指定的项目返回对 DTE (Development Tools Environment) 
                        的引用。如果未指定任何项目,则返回
                        程序包管理器控制台中选择的默认项目。
    
    Open-PackagePage        打开浏览器,并指向指定的程序包的 ProjectUrl, LicenseUrl 或
    ReportAbuseUrl。
    
            Register-TabExpansion    为命令的参数注册选项卡扩展。
    
    另请参阅
    联机文档: http://go.microsoft.com/fwlink/?LinkID=206619
        Get-Package
        Install-Package
        Uninstall-Package
        Update-Package
        Add-BindingRedirect
        Get-Project
        Open-PackagePage
        Register-TabExpansion
    View Code

     步骤二:

     允许数据迁移,继续输入命令:PM> enable-migrations   会自动生成migration配置文件类,在构造函数中加入黄色mark的部分,允许自动迁移。比如你Model里面修改了字段类型,长度,或者增加了字段。它来自动修改数据库。但这还没有结束

    namespace NoteSystem.Migrations
    {
        using System;
        using System.Data.Entity;
        using System.Data.Entity.Migrations;
        using System.Linq;
    
        internal sealed class Configuration<TContext> : DbMigrationsConfiguration<TContext> where TContext:DbContext
        {
            public Configuration()
            {
                AutomaticMigrationsEnabled = true;
                AutomaticMigrationDataLossAllowed = true;
            }
    
           
        }
    }

     步骤三:修改数据库的构造函数,我的数据库这里是NoteDb ,灰色部分我们之前用的方式,很不好,黄色部分就是支持数据迁移初始化。

      public NoteDb()
                : base(DbNameOrDbConnectionstring)
            {
                Database.SetInitializer(new MigrateDatabaseToLatestVersion<NoteDb, Configuration<NoteDb>>());
    //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<NoteDb>()); }

     总结:这个migration还是省了不少事情,但也不是那么的完全智能,最好不要手动去删除数据库中的表,通过dbset来删除,因为数据库所有的操作记录是记录在数据库中,在系统表的MigrationHistory 中。 你的手动记录是没有存在这里面的。

     

      

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-3-29 22:30 , Processed in 0.080018 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表