在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.
在Code First中使用Migrations对实体类和数据库做出变更的更多相关文章
- 解决mybatis实体类和数据库列名不匹配的两种办法
我们在实际开发中,会遇到实体类与数据库类不匹配的情况,在开发中就会产生各种各样的错误,那么我们应该怎么去解决这一类的错误呢?很简单,下面我们介绍两种解决方法: 首先我们看一下数据库和实体类不匹配的情况 ...
- mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_智能标签
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法. 这2种方式都可以实现不用persist ...
- KO ------- 表中字段名和实体类属性名不一致
-----------------------siwuxie095 KO ------- 表中字段名和实体类属性名不一致 如果数据库表中的字段名和实体类的属性名不一致,那么在查询时, 相应字段的结果就 ...
- ASP.NET Core EFCore 之DBFirst 自动创建实体类和数据库上下文
通过引用Nuget包添加实体类 运行 Install-Package Microsoft.EntityFrameworkCore.SqlServer 运行 Install-Package Micros ...
- 【繁星Code】如何在EF将实体注释写入数据库中
最近在项目中需要把各个字段的释义写到数据库中,该项目已经上线很长时间了,数据库中的字段没有上千也有上百个,要是一个项目一个项目打开然后再去找对应字段查看什么意思,估计要到明年过年了.由于项目中使用En ...
- java 项目中几种O实体类的概念
经常会接触到vo,do,dto的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,vo对应于页面上需要显示的数据(表单),do对应 ...
- java中的xml与实体类之间的映射
实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...
- 模拟实现MyBatis中通过SQL反射实体类对象功能
话不多说,直接上干货! package cn.test; import java.lang.reflect.Method; import java.sql.Connection; import jav ...
随机推荐
- OpenCV学习(1)-安装(Windows)
下载安装 在这里下载.我下载了2.4.9的Windows版本.双击安装即可. 配置环境变量 配置环境变量的目的是为了让系统找到OpenCV的动态链接库.因此需要把动态链接库添加到系统环境变量PATH中 ...
- (hdu)1160 FatMouse's Speed
Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...
- Constants in C++
The first motivation for const seems to have been to eliminate the use of preprocessor #define for v ...
- (转)Libevent(3)— 基础库
转自:http://name5566.com/4202.html 参考文献列表:http://www.wangafu.net/~nickm/libevent-book/ 此文编写的时候,使用到的 Li ...
- ASP.NET错误页
当页面发生错误的时候,ASP.Net会将错误信息展示出来,这样一来不好看,二来会泄露网站的内部实现信息,给网站带来安全隐患,因此需要定制错误页,发生错误时显示开发人员定制的页面404页面放点广告也是好 ...
- jQuery移除指定元素后的所有元素
jQuery 遍历的nextAll() 方法可以搜索 DOM 树中的元素跟随的同胞元素,也就是一个元素后面的所有同级元素,删除可以使用方法remove(),所以连起来为 $(selector).nex ...
- [转载] PowerMokito 使用
一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解 ...
- Protel DXP画原理图常见错误与警告
一.警告信息 警告信息对于将来转换成PCB不会造成严重问题,通常可以忽略.但它也给我们提供了一些参考,比如unconnceted pin能告诉我们芯片的哪些管脚没有连接,很有检错意义. 1.has n ...
- 警惕arm-linux-gcc编译器优化选项
arm-linux-gcc的优化选项例如(-O2),可以加速我们的程序,使程序执行效率更高.但是,倘若我们就是需要程序慢一点运行,但是优化却把我们的延时函数优化的没有了的时候,这种优化却不是我们想要的 ...
- sqrt和Hailstone
求平方根 class SqRoot{ void calcRoot(double z){ double x=1;double y=z/x; while(Math.abs(x-y)>1E-10) { ...