zoukankan      html  css  js  c++  java
  • 在Code First中使用Migrations对实体类和数据库做出变更

    在Code First中使用Migrations对实体类和数据库做出变更,Mirgration包含一系列命令。

       工具--库程序包管理器--程序包管理器控制台

       运行命令:Enable-Migrations 启用Code first Migration

       运行成功后会产生两个类:Configuration.cs  和<timestamp>_InitialCreate.cs,这是一个用时间戳作为前缀的类。如201212310201487_InitialCreate.cs

      然后更改实体类Blog,增加一个属性Url

     

      public class Blog    {        public int BlogId { get; set; }        public String Name { get; set; }        public String Url { get; set; }        public virtual List<Post> Posts { get; set; }    }

     运行命令:Add-Migration AddUrl,运行成功后会产生一个类:201212310209000_AddUrl.cs

     运行命令:Update-Database,该命令运行成功后,更改属性将会映射到数据库。在SQL Server资源管理中刷新数据库查看变更。

    6:Data Annotations

        到目前为止我们使用EF发现实体类都是使用默认的行为,有很多行为不符合我们的要求,所以我们使用Data Annotations和 fluent API解决这个问题。

     先添加一个User类,然后更新BlogContext:

     public class User    {        public String Username { get; set; }        public String DisplayName { get; set; }            }

      如果当前我们使用migration命令去变更数据库,则会提示错误:“EntityType ‘User’ has no key defined. Define the key for this EntityType”,因为EF没有办法知道Username应该是User表的主键,在Program顶部添加代码:using System.ComponentModel.DataAnnotations; 然后给Username属性添加属性Key

       public class User    {        [Key]        public String Username { get; set; }        public String DisplayName { get; set; }            }

     运行命令:Add-Migration AddUser将变更映射到数据库。运行成功后会产生一个类:201212310235372_AddUser.cs

    public partial class AddUser : DbMigration    {        public override void Up()        {            CreateTable(                "dbo.Users",                c => new                    {                        Username = c.String(nullable: false, maxLength: 128),                        DisplayName = c.String(),                    })                .PrimaryKey(t => t.Username);                    }                public override void Down()        {            DropTable("dbo.Users");        }    }

      运行命令:Update-Database将新的迁移映射到数据库,此时查看数据库会产生User表。

    7、Fluent API

        如果我们需要更变列名,则使用FluentAPI, 如果我们需要把User表的DisplayName改为Display_name.在BlogContext中重写OnModelCreating:

        

    protected override void OnModelCreating(DbModelBuilder modelBuilder){      modelBuilder.Entity<User>()          .Property(u=>u.DisplayName)          .HasColumnName("Display_name");}

     运行命令:Add-Migration ChangeDisplayName.

      运行命令:Update-Database.

      查看User表已更新字段Display_name.

  • 相关阅读:
    为啥负利率国债有人抢着买?因为时代变了
    微增长时代
    U盘插入电脑后图标是灰色的,打开提示“请将磁盘插入驱动器”
    计算shell 脚本的执行时间
    win10系统应用商店打开后无法联网 代码: 0x80131500 的解决办法
    Jetbrains家的软件都可用的激活码-pycharm
    postman中x-www-form-urlencoded与form-data的区别
    升级Gogs版本
    上海对售价超1499元的茅台酒即没收并另处罚款
    提高收入的根本途径
  • 原文地址:https://www.cnblogs.com/cw_volcano/p/3269745.html
Copyright © 2011-2022 走看看