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.

  • 相关阅读:
    Spring @ContextConfiguration注解
    【Spring】Junit加载Spring容器作单元测试(整理)
    RestTemplate使用教程
    Linux下Maven私服Nexus3.x环境构建操作记录
    Maven 的 classifier 的作用
    Maven 教程(22)— Maven中 plugins 和 pluginManagement
    IOC给程序带来的好处
    Java NIO原理图文分析及代码实现
    Hadoop的RPC机制源码分析
    Flume之核心架构深入解析
  • 原文地址:https://www.cnblogs.com/cw_volcano/p/3269745.html
Copyright © 2011-2022 走看看