zoukankan      html  css  js  c++  java
  • CodeFrist基础_迁移更新数据

    一丶自动迁移

    第一次启用迁移:NeGet-->Enable-Migrations

         public DemoDbContext()
                 : base("name=ConncodeFirst")
            {
           //注册自动迁移 Database.SetInitializer(
    new MigrateDatabaseToLatestVersion<DemoDbContext, CodeFirst_Task.Migrations.Configuration>()); }
    注意1.Configuration.cs生成的是internal sealed class,如果不在启动程序集中,则需要修改成public
       2.
    CodeFirst_Task这儿指命名空间


    二丶代码迁移

    1.向NeGet输入:enable-migrations –EnableAutomaticMigration:$true

    则自动生成一个文件夹Migrations,其中存在一个Configuration的类

    2.最后在NeGet控制台中输入 update-database 运行
    这时候在运行mvc的项目 数据库表中就会自动增加了一列或者对应就修改了  原有的数据都还存在

    【AutomaticMigrationDataLossAllowed = true;】判断自动迁移期间如果数据丢失是否可以接受

    网上摘抄:

     1 一. 模型设计
     2      1.  遵循EF标准,注意表关系配对
     3      2.  数据模型里尽量把必须的属性和说明都写全
     4      3.  EF默认id字段为主键,如果没有,需指定主键
     5  
     6 二. 数据迁移
     7      1.  命令运行环境:visual studio工具栏->工具->NuGet 程序包管理器->程序包管理器控制台
     8      2.  基本命令和常用参数
     9         >  get-help                  获取帮助的命令(例:get-help Enable-Migrations –detailed)
    10            –detailed                 详细用法
    11         >  Enable-Migrations         启用迁移
    12            -Force                    强制覆盖
    13            -ProjectName              目标项目(迁移类所在的项目)
    14            -StartUpProjectName       启动项目(包含数据库连接字符串配置文件所在的项目)
    15            -ContextTypeName          需要迁移的数据库(类)
    16            -ConnectionStringName     指定使用配置文件中连接字符串的名称
    17            -ConnectionString         指定使用的连接字符串
    18            -ConnectionProviderName   指定连接字符串的provider名称
    19            -MigrationsDirectory      指定迁移文件的目录(多个数据库,独立自动迁移用)
    20         >  Add-Migration             为挂起的Model变化添加迁移脚本
    21            -Force
    22            -ProjectName
    23            -StartUpProjectName
    24            -ConfigurationTypeName    指定使用的迁移配置
    25            -IgnoreChanges            忽略检测到挂起的model改变,为已有的数据库启用迁移创建一个初始的,空的迁移。
    26            -ConnectionStringName  
    27            -ConnectionString      
    28            -ConnectionProviderName 
    29         >  Update-Database           将挂起的迁移更新到数据库
    30            -Force
    31            -ProjectName
    32            -StartProjectName
    33            -ConfigurationTypeName
    34            -ConnectionStringName 
    35            -ConnectionString 
    36            -ConnectionProviderName 
    37            -SourceMigration          只有-Script打开时才有效。指定迁移的名称用作更新的起点。忽略则使用最后一次应用的迁移。
    38            -TargetMigration          指定将数据库更新到哪个迁移的名称。
    39            -Script                   生成SQL脚本
    40         >  Get-Migrations            获取已经应用的迁移                                   
    41      3.  迁移操作步骤举例:
    42              DataBase                       :解决方案中,数据模型层项目名称
    43              Member                         :解决方案中,启动项的名称
    44              DataBase.Member.MemberEntities :需要应用数据迁移的数据上下文
    45          a.  第一次启用迁移,输入命令: 
    46              Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities 
    47              并敲回车键,然后打开生成的Migrations文件夹中的Configuration.cs文件, 
    48              把构造方法中的AutomaticMigrationsEnabled = false;改为AutomaticMigrationsEnabled = true;
    49              如果有多个数据库,每个库需要独立指定迁移文件,命令格式如下:
    50              Enable-Migrations -ProjectName DataBase -StartUpProjectName Member -ContextTypeName DataBase.Member.MemberEntities -MigrationsDirectory:MemberMigrations
    51          b.  模型有改动时,输入命令:add-migration update20150508 -ProjectName DataBase -StartUpProjectName Member -Force并敲回车键,创建迁移脚本
    52              然后 输入命令:Update-Database -Verbose -ProjectName DataBase -StartUpProjectName Member并敲回车键,执行迁移操作
    53      4.  配置自动迁移
    54          在应用程序的入口方法(函数)里注册自动迁移:
    55          Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataBase.Member.MemberEntities, DataBase.MemberMigrations.Configuration>()); 
    56          注意:Configuration.cs生成的是internal sealed class,如果不在启动程序集中,则需要修改成public
    57      5.  脱离visual studio环境做数据库版本迁移,可用migrate.exe,可参考:http://msdn.microsoft.com/zh-cn/data/jj618307
    58  
    59 三. 注意事项:
    60      1.  连接字符串不用DBFirst自动生成的那么复杂,采用如下格式即可:
    61          <add name="MemberEntities" connectionString="server=.;database=Member;integrated security=true;"  providerName="System.Data.SqlClient"/>
    62      2.  有挂起的Model改变时,会导致操作不正常,注意操作步骤,必要时清理挂起的迁移。
    63      3.  修正后数据库,里面的数据如果需要调整,用Configuration.cs文件里的Seed方法,示例如下:
    64         protected override void Seed(DataBase.Member.MemberEntities context)
    65         {
    66             var users = new List<User>
    67             {
    68                 new User { Account = "test",   Password = "123" },
    69                 new User { Account = "admin",   Password = "456" }
    70             };
    71             users.ForEach(s => context.Users.AddOrUpdate(p => p.Account, s));
    72             context.SaveChanges();
    73         }
    View Code
    作者:chenze
    出处:https://www.cnblogs.com/chenze-Index/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    [JSP] c:forEach 如何输出序号
    ckeditor_3.6.6.2+CKFinder2.0.2配置
    招聘面试技巧
    eclipse注释模板
    javadoc时候乱码-编码 GBK 的不可映射字符
    Java生成和操作Excel文件
    JOptionPane的使用
    2015内蒙古银行招聘网申注意事项
    Spring Security笔记:使用数据库进行用户认证(form login using database)
    中南大学oj:1336: Interesting Calculator(广搜经典题目)
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/9712314.html
Copyright © 2011-2022 走看看