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.

  • 相关阅读:
    手机网页唤醒app,
    h5 audio进度条
    js判断字符串与字符串相互包含,以及数组是否包含某个元素;
    vue cli 打包项目造成css背景图路径错误
    vue-cli webpack打包不.map文件,iview 项目打包完,图标路径有问题
    常用的活动榜单
    vue-cli的webpack模板项目配置文件分析,配置信息详解
    eclipse怎么debug项目
    什么是前置机,前置机的作用是什么
    jsp中连接数据库及实现增删改查
  • 原文地址:https://www.cnblogs.com/cw_volcano/p/3269745.html
Copyright © 2011-2022 走看看