在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 ...
随机推荐
- linux 列出安装包内的文件
rpm系列: 1. 文件类型 rpm -qpl xxx.rpm2. 已安装文件 rpm -ql packagename debain系列: dpkg -c xxxx.deb
- Map集合中的一些具体方法的体现
package com.java.b.map.www; import java.util.Collection;import java.util.HashMap;import java.util.It ...
- 10.21_Nutz批量插入顺序,POI,wiki持续关注,POI,SSH,数据库优先
(1)Nutz,dao的批量插入会关注顺序吗? http://www.douban.com/group/topic/64322582/ (2)工作需要优先!!! POI,SSH,数据库管理及plsq ...
- 08_使用TCP/IP Monitor监视SOAP协议
[SOAP定义] SOAP 简单对象访问协议,基于http传输xml数据,soap协议体是xml格式.SOAP 是一种网络通信协议SOAP 即Simple Object Access Pr ...
- SSH中调用另一action的方法(chain,redirect)
从一个Action直接跳到另一个Action中,Struts提供了两种结果类型可以实现:chain.redirect. 从Servlet中学到重定向是不能保留参数的,也就是说重定向了 ...
- Android MVP模式
转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...
- 深度优化LNMP之Nginx (转)
深度优化LNMP之Nginx Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息 一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例 ...
- ubuntu ssh安装
参考 http://www.linuxidc.com/Linux/2010-02/24349.htm 文章很不错!! ssh 登录名@ip地址 , 如果提示验证key can't be esta ...
- Swift语言 1小时速学教程
本文由 张渊杰 (网名寂静)编写 Swift语言 1小时速学教程 写在前面的话 有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了 要想在1小时 ...
- PHP异常处理
一.异常处理——可以有效地控制多条出现错误或异常的代码 基本语法如下: try{ //可能出现异常的代码 } catch(Exception $e){ //对异常处理 //1.自己处理 //2.不作处 ...