在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.

在Code First中使用Migrations对实体类和数据库做出变更的更多相关文章

  1. 解决mybatis实体类和数据库列名不匹配的两种办法

    我们在实际开发中,会遇到实体类与数据库类不匹配的情况,在开发中就会产生各种各样的错误,那么我们应该怎么去解决这一类的错误呢?很简单,下面我们介绍两种解决方法: 首先我们看一下数据库和实体类不匹配的情况 ...

  2. mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_智能标签

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  3. JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法

    在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法.   这2种方式都可以实现不用persist ...

  4. KO ------- 表中字段名和实体类属性名不一致

    -----------------------siwuxie095 KO ------- 表中字段名和实体类属性名不一致 如果数据库表中的字段名和实体类的属性名不一致,那么在查询时, 相应字段的结果就 ...

  5. ASP.NET Core EFCore 之DBFirst 自动创建实体类和数据库上下文

    通过引用Nuget包添加实体类 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer 运行 Install-Package Micros ...

  6. 【繁星Code】如何在EF将实体注释写入数据库中

    最近在项目中需要把各个字段的释义写到数据库中,该项目已经上线很长时间了,数据库中的字段没有上千也有上百个,要是一个项目一个项目打开然后再去找对应字段查看什么意思,估计要到明年过年了.由于项目中使用En ...

  7. java 项目中几种O实体类的概念

    经常会接触到vo,do,dto的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,vo对应于页面上需要显示的数据(表单),do对应 ...

  8. java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  9. 模拟实现MyBatis中通过SQL反射实体类对象功能

    话不多说,直接上干货! package cn.test; import java.lang.reflect.Method; import java.sql.Connection; import jav ...

随机推荐

  1. Swift 学习手记1,pod 的 类库使用

    问题: 在Swift中,我们无法使用像Objective-c 一样的 #import 例如 在头部输入 #import <ReactiveCocoa/ReactiveCocoa.h> 是不 ...

  2. 我爆一个托 QQ305242038 电话 18782169971

    这是两个人,一品天下附近的托,qq负责聊天,电话那个负责见面

  3. SGU 239.Minesweeper

    题意: 如图,一列未知的区域长度为n(≤1000),给出第二列的数字,求区域中雷的排列有多少种. Solution: 搜索.这题看上去1000的范围很大,实际上加上合理的剪枝,状态数会变得非常非常少. ...

  4. 【转】Nginx 服务器安装及配置文件详解

    1. 安装nginx 1.1 选择稳定版本 我们编译安装nginx来定制自己的模块,机器CentOS 6.2 x86_64.首先安装缺少的依赖包: # yum -y install gcc gcc-c ...

  5. 挂载磁盘的问题(/dev/sdb1 is apparently in use by the system; will not make a 文件系统 here!)

    用fdisk给新磁盘分区后.然后要创建文件系统 [root@cuizhipeng ~]# mkfs.ext4 /dev/sdb1mke2fs 1.41.12 (17-May-2010)/dev/sdb ...

  6. 深入了解float

    1.float的历史   初衷是为了图片的文字环绕,将img设置float 2.破坏性与包裹性  a.父元素没有设置高度,内部元素浮动后,服务元素的高度被破坏了,可以将其父元素设置overflow:h ...

  7. Python3 函数式编程

    函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用.而允许使用变量的程序设计语言,由 ...

  8. 『奇葩问题集锦』function * (next){ 执行报错 SyntaxError: Unexpected token *

    这是因为  app.use(function * (){ 语句中有一个 * ,这种方式被称为generator functions ,一般写作function *(){...} 的形式,在此类func ...

  9. gulp和webpack初探

    gulp 真正“流程”化工具 我记得实习刚刚进公司看到grunt,还是有点蒙,之前一直是本地开发,游览器F5,没想到前端也需要“编译工具”.所以grunt一直给我的感觉是“编译工具”,你写的很多代码还 ...

  10. Custom template tags and filters

    Code layout Custom template tags and filters must live inside a Django app. If they relate to an exi ...