EntityFramework codefirst
一、Entity Framework 迁移命令(get-help EntityFramework)Enable-Migrations 启用迁移 Add-Migration 为挂起的Model变化添加迁移脚本 Update-Database 将挂起的迁移更新到数据库 Get-Migrations 获取已经应用的迁移 二、自定义迁移现有一个Demo,有如下Product模型: 1: public class Product 2: { 3: 4: public int ProductId { get; set; } 5: 6: public string ProductName { get; set; } 7: 8: public decimal Price { get; set; } 9: 10: }
修改Product,添加如下两个属性: 1: public DateTime CreateDate { get; set; } 2: 3: public string Unit { get; set; }
其中,CreateDate和Unit都是必须的。 1. Enable-Migrations在Package Manager Console中执行Enable-Migrations启动迁移。 执行get-help Enable-Migrations –detailed 查看Enable-Migrations的详细用法。 -ContextTypeName 指定要使用的Context -EnableAutomaticMigrations 启动自动迁移 -ProjectName 指定搭建的迁移类添加到的项目 -StartUpProjectName 指定使用的配置文件所在的项目 -ConnectionStringName 指定使用配置文件中连接字符串的名称 -ConnectionString 指定使用的连接字符串 -ConnectionProviderName 指定连接字符串的provider名称 -Force 重写迁移配置 本Demo中执行 Enable-Migrations -ProjectName Demo.Domain -StartUpProjectName MigrationsDemo 执行结果是:检测到数据库是由database initializer创建,为现有的数据库搭建初始化迁移脚本。本Demo中是在Demo.Domain项目中创建了一个Migrations文件夹,以及Migrations中的2个文件:Configuration.cs和201311010641361_InitialCreate.cs Configuration 类。此类允许您针对上下文配置迁移的行为。 InitialCreate 迁移。此迁移已在启用迁移之前生成,因为我们事先让 Code First 自动创建了一个数据库。此基架迁移中的代码表示数据库中已创建的对象。 如果尚未创建数据库,则不会将此 InitialCreate 迁移添加到项目中。而是,首次调用 Add-Migration 时,用于创建这些表的代码将为新迁移搭建基架。 2. Add-Migration在Package Manager Console中执行Add-Migration搭建挂起的Model变化迁移脚本。 执行get-help Add-Migration –detailed查看Add-Migration的详细用法。 -Name 指定自定义脚本的名称 -Force -ProjectName -StartUpProjectName -ConfigurationTypeName 指定使用的迁移配置 -IgnoreChanges 忽略检测到挂起的model改变,创建一个空的迁移。这个选项可用来为已有的数据库启用迁移创建一个初始的,空的迁移。 -ConnectionStringName 指定使用配置文件中连接字符串的名称 -ConnectionString 指定使用的连接字符串 -ConnectionProviderName 指定连接字符串的provider名称 本Demo中执行 Add-Migration Add_Product_CreateDateAndUnit -ProjectName Demo.Domain 生成的Add_Product_CreateDateAndUnit: 2.1 SQL方法前面提到CreateDate和Unit都是必须的,像Unit是string类型的,更新到数据库默认值为空,CreateDate默认值为1900/1/1 0:00:00,如下图 如果需要更改CreateDate或Unit的值,可以在Up()中使用Sql方法: 注:更新脚本时,将Unit设为中文,记得加’N’,否则在LocalDB中更新的内容会变成’?’,在SQL Server 2008 R2中没有,无论用什么数据库加上都是一个好习惯! 2.2 IgnoreChanges的使用如果要映射现有的数据库,可以执行Add-Migration Initial,然后执行 Update-Database 这样就创建了一个初始的迁移。在这个基础上再修改Demo,然后迁移。 3. Update-Database在Package Manager Console中执行Update-Database将挂起的迁移更新到数据库。 执行get-help Update-Database -detailed查看Add-Migration的详细用法。 -SourceMigration 只有-Script打开时才有效。指定迁移的名称用作更新的起点。忽略则使用最后一次应用的迁移。 -TargetMigration 指定将数据库更新到哪个迁移的名称。 -Script 生成SQL脚本 -Force -ProjectName -StartProjectName - ConfigurationTypeName -ConnectionStringName 指定使用配置文件中连接字符串的名称 -ConnectionString 指定使用的连接字符串 -ConnectionProviderName 指定连接字符串的provider名称 本Demo中执行 Update-Database -ProjectName Demo.Domain 3.1 迁移到特定版本上面提到可以使用-TargetMigration开关将数据库迁移到特定的状态。比如,撤销数据库新添加的CreateDate和Unit字段。执行 Update-Database -ProjectName Demo.Domain -TargetMigration:InitialCreate 如果要一直回滚到空数据库,可以使用 Update-Database –TargetMigration:0或-TargetMigration:$InitialDatabase命令。 3.2 生成SQL脚本生成SQL脚本要使用-Script开关,另外两个比较重要的开关是:-SourceMigration和-TargetMigration。 比如我们要生成InitialCreate到 Add_Product_CreateDateAndUnit的迁移SQL脚本,则执行如下命令: Update-Database -ProjectName Demo.Domain -Script -SourceMigration:InitialCreate -TargetMigration:Add_Product_CreateDateAndUnit 生成下面的SQL脚本 如果忽略-SourceMigration开关,则使用最后一次应用的迁移作为起点,忽略-TargetMigration,则使用最新迁移作为终点。 4. 应用程序启动时自动升级通过注册 MigrateDatabaseToLatestVersion 数据库初始值设定项来实现该功能。数据库初始值设定项只是包含用于确保数据库安装正确的某种逻辑。首次在应用程序进程 (AppDomain) 中使用上下文时,将运行此逻辑。 Demo中执行 Database.SetInitializer(new MigrateDatabaseToLatestVersion<OrderContext, Configuration>()); 其中Configuration生成的是internal sealed class,不在一个程序集中需要修改成public 三、使用Migrate.exe迁移将命令行工具migrate.exe复制到包含迁移配置的程序集位置,可以在VS外部进行迁移操作。 在使用 NuGet 安装实体框架时,migrate.exe 位于下载包的 tools 文件夹中。在 <项目文件夹>\packages\EntityFramework.<版本>\tools 中 有了 migrate.exe 之后,需要将其复制到包含迁移的程序集位置。 如果应用程序面向 .NET 4 而不是 4.5,则还需要将 Redirect.config 复制到这个位置,并将其重命名为 migrate.exe.config。这样,migrate.exe 会让正确的绑定重定向能够找到实体框架程序集。 注意:migrate.exe 目前不支持 x64 程序集。 Migrate.exe的使用migrate.exe /? 显示帮助信息 migrate assembly [configurationType] [/targetMigration] [/startUpDirectory] [/startUpConfigurationFile] [/startUpDataDirectory] [/connectionStringName] [/connectionString] [/connectionProviderName] [/force] [/verbose] [/?] Assembly 指定包含迁移配置类型的程序集 [configurationType] 指定迁移配置类型的名称 [connectionProviderName] 指定连接字符的provider [connectionString] 指定使用的连接字符串 [connectionStringName] 指定配置文件中使用的连接字符串名称 [force] 表示允许自动迁移引起数据丢失 [startUpConfigurationFile] 指定程序的Web.config或App.config [startUpDataDirectory] 指定当解析包含|DataDirectory|的连接字符串时使用的目录 [targetMigration] 指定迁移到的版本 [verbose] 指定输出执行的SQL和其他信息到控制台 本Demo中执行 migrate Demo.Domain.dll /startUpConfigurationFile="MigrationsDemo.exe.config" /targetMigration=” Add_Product_CreateDateAndUnit” /verbose |
EntityFramework codefirst的更多相关文章
- EntityFramework CodeFirst SQLServer转Oracle踩坑笔记
接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...
- EntityFramework Code-First 简易教程(二)-------Code First约定
Code First 约定 在前一篇中,我们已经知道了EF Code-First怎样从模型类(domain classes)中创建数据库表,下面,我们开始学习默认的Code-First约定. 什么是约 ...
- EntityFramework Code-First 简易教程(一)
前言:学习了EF框架这么久,还没有好好总结一番,正好遇到一国外的网站,发现不错,随即翻译过来,一是让自己复习一遍,二是供广大初学者学习,翻译过程中加入了一些自己的理解,如有错误,还请指出,多谢多谢.好 ...
- EntityFramework Code-First教程(一)
前言:学习了EF框架这么久,还没有好好总结一番,正好遇到一国外的网站,发现不错,随即翻译过来,一是让自己复习一遍,二是供广大初学者学习,翻译过程中加入了一些自己的理解,如有错误,还请指出,多谢多谢.好 ...
- 三层架构下的EntityFramework codefirst
好久没写博客了,今天研究了EF框架的CodeFirst模式,从字面意思可以看出,代码优先.所谓代码优先,与以往的添加ado.net不同,主要是编写代码生成数据库和数据表,生成数据实体映射.个人感觉这种 ...
- EntityFramework Code-First—领域类配置之DataAnnotations
本文出自:https://www.cnblogs.com/tang-tang/p/5510574.html 一.摘要 EF Code-First提供了一个可以用在领域类或其属性上的DataAnnota ...
- EntityFramework Code-First 简易教程(六)-------领域类配置之DataAnnotations
EF Code-First提供了一个可以用在领域类或其属性上的DataAnnotation特性集合,DataAnnotation特性会覆盖默认的EF约定. DataAnnotation存在于两个命名空 ...
- EntityFramework Code-First 简易教程(九)-------一对多
一对多(One-to-Many)关系: 下面,我们来介绍Code-First的一对多关系,比如,在一个Standard(年级)类中包含多个Student类. 如果想了解更多关于one-to-one,o ...
- EntityFramework Code-First 简易教程(八)-------一对一
配置一对一(One-to-One)关系: 两个实体中,如果一个实体的一个实例与另一个实体相关,则我们就叫做一对一关系 查看如下代码: public class Student { public Stu ...
- EntityFramework Code-First 简易教程(七)-------领域类配置之Fluent API
Fluent API配置: 前面我们已经了解到使用DataAnotations特性来覆写Code-First默认约定,现在我们来学习Fluent API. Fluent API是另一种配置领域类的方法 ...
随机推荐
- ASP.NET Web API路由规则(二) 【转】
http://www.cnblogs.com/liulun/archive/2012/06/20/2556556.html 默认的规则 在ASP.NET MVC4中 global.asax.cs代码中 ...
- TensorFlow笔记六:基于cifar10数据库的AlexNet识别
准确率只有70%,cpu版本的TF居然跑了两天才跑完,其他方法将继续尝试. 生成数据目录: import numpy as np import os train_label = {} for i in ...
- SQL CASE WHEN ... THEN ... ELSE.. END 实例
用一个SQL语句完成不同条件的分组(SELECT部分): select QuoteOrderId,SUM(case when(ApprovalStatus=1)then Amount else 0 e ...
- 【转载】教你使用 Reflexil 反编译.NET
简介 反编译的方式有很多种,其实最靠谱的还是IL反编译. 如果不懂IL可以尝试我这边文章入门:http://www.wxzzz.com/278.html 不过我下面要说的不是IL这种底层的代码反编译, ...
- 【Servlet与JSP】请求转发与重定向
假设一个登录系统,要求用户输入用户名和密码: 用户在上面表单当中输入了信息之后,点击登录按钮(type="submit")将表单作为请求参数进行提交. 这一提交就有两种形式:get ...
- Redis单台的安装部署及集群部署
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...
- ASP.NET动态网站制作(12)-- JQ(4)
前言:这节课接着上次课的继续讲. 内容:接上--> 1.jq元素样式设置: (4)某个元素中是否含有某个css类别,返回布尔型:$("li:last").hasClass( ...
- doT.js具体使用介绍
官网: http://olado.github.iodoT.js具体使用介绍 用法: {{= }} for interpolation {{ }} for evaluation {{~ }} for ...
- python 基础 4.2 高阶函数上
一.高阶函数 把函数当做参数传递的一种函数 1>map()函数 map函数是python内置的一个高阶函数,它接受一个函数f和一个list,并把list元素以此传递给函数f,然后返回一个函数 ...
- 利用python进行数据分析之pandas入门
转自https://zhuanlan.zhihu.com/p/26100976 目录: 5.1 pandas 的数据结构介绍5.1.1 Series5.1.2 DataFrame5.1.3索引对象5. ...