Entity Framework Core Code First 实践

任何一种技术的出现都是为了解决一系列特定的问题,只有了解了技术所要解决的关键问题,才能理解它的真正用途,之后,才能在实践中用好它。

Entity Framework Core也不列外,它的出现就是为了解决一个问题。在数据库的世界里面,关系型数据库从出现到现在一直是主流。而在面向对象编程的软件开发中 (Objects Oriented Programming),我们使用的频率最高的词是Object。那么,软件开发和数据库世界之间就存在明显的失配,怎么解决呢?我们可以使用object-relational mappers 或者简称为OR Mappers。在运用OR Mapper方面.NET比Java (NHibernate)晚了不是一点点,ADO.NET Entity Framework 就是微软开发的OR Mapper。 但是,我用的更多的是Entity Framework Core这个版本,要紧更技术的步伐,还有因为项目的需要。这些OR Mapper可以把数据库的表已经表之间的关系直接映射到Objects,让开发者不必再去手动做这些map了,哇,好省心!

前提条件

Windows 10 操作系统
安装 .NET Core SDK
执行以下命令,安装packages

dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design

因为,我们将会使用它所包含的.NET CLI, 你可以使用在cmd里面输入 dotnet ef 来判断是否安装成功。CLI stands for Command Line Interface.

路径

打开cmd窗口,路径一般要指向项目根目录,确保在这个目录下包含了所有的Migration 文件。

常用操作命令

更新数据库

使用下面的命令更新数据库,每一次更新,都会把新的Migration文件中包含的更改,一起更新到数据库中,这是一个Append操作,不会覆盖已有的Migration,不会重建数据库。

dotnet ef database update

新建Migration

使用下面的命令新建一个Migration,这里的migration实际上就是Entities的改动。一般建议每一个Migration只包含单一的更改。

dotnet ef migrations add [NAME_of_MIGRATION]

Migration 文件实例

using System;
using Microsoft.EntityFrameworkCore.Migrations; namespace TravelDesk.Api.Data.Migrations
{
public partial class TrainOptions_RemoveColumns : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Conditions",
table: "TrainOptions"); migrationBuilder.DropColumn(
name: "Departure",
table: "TrainOptions"); migrationBuilder.DropColumn(
name: "Return",
table: "TrainOptions");
} protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Conditions",
table: "TrainOptions",
nullable: true); migrationBuilder.AddColumn<string>(
name: "Departure",
table: "TrainOptions",
nullable: true); migrationBuilder.AddColumn<string>(
name: "Return",
table: "TrainOptions",
nullable: true);
}
}
}

Up 方法,是dotnet ef database update命令执行之后,即将要在数据库执行的更改
Down 方法,是在执行更新到某个特定版本是,数据库的回滚所需的更改

移除最新创建的Migration文件(或者是取消最新更改)

dotnet ef migrations remove

这个命令会移除最新创建的Migration文件,但它不会更新数据库。所以,如果这个更新已经被apply到了数据库中,这个操作是不能够删除数据库中的更改的。

高级操作

删除数据库

dotnet ef database drop

这个操作在项目开发中偶尔会用到,特别是出现Migration冲突,或者,发现很多更新都没有到本地数据库的时候。一般需要删除本地数据库,然后重建。

把数据库更新到特定的Migration

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate

以上操作会把数据库恢复到历史版本,也就是说,如果有1,2,3,4,5,6,7,8,9个migration, 在执行了一下命令之后

dotnet ef databae update 5

那么,5和之后的 6,7,8,9的migration都会回滚。注意,这个操作不会删除Migration文件,如果,你再次执行dotnet ef database update 操作,那么,更新会被再次应用到数据库中。

经验

尽量不要在Entity里面使用 new dateTime 或者 new GUID,合并代码的时候令人崩溃啊!

参考文献

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
https://t-heiten.net/ef-core/reverting-a-migration/

Entity Framework Core Code First 项目实践的更多相关文章

  1. 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  2. Entity Framework Core Code First

    参考地址:https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/new-db

  3. .net core Entity Framework Core Code First 框架 分层开发

    由于之前苦于无法把 Entityframework 跟Web层剥离.找了很久..找到了这个框架..分享给大家..  GitHub 地址:https://github.com/chsakell/dotn ...

  4. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

  5. ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.

    在ASP.Net Core 2.0的项目里, 我使用Entity Framework Core 2.0 作为ORM. 有人习惯把数据库的连接字符串写在appSettings.json里面, 有的习惯写 ...

  6. 在WebApi项目里使用MiniProfiler并且分析 Entity Framework Core

    在WebApi项目里使用MiniProfiler并且分析 Entity Framework Core 一.安装配置MiniProfiler 在现有的ASP.NET Core MVC WebApi 项目 ...

  7. 张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

    写在前面 Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架.虽然 .NET 平台中 ORM 框架有很多,比如 Dapper.NHibe ...

  8. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  9. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...

随机推荐

  1. 谈一谈个人利用Java的mysql的知识完成的数据库的项目-----用户信息管理系统

    首先,我先简述一下自己做的过程啊,相信大家来找这样的博客,也都是为了完成自己课程任务吧.我也一样是一名大一的学生,是为了自己的课程任务而开始做数据库的项目的.因为还没学mysql吗,所以是自己找视频啊 ...

  2. 用launchscreen.storyboard适配启动图方法

    wwdc2019有session提出.到2020年4月,上架APP的启动图必须使用launchscreen.storyboard,不能再使用assert方式了.但是session没有给出如何适配.网上 ...

  3. OCR文字识别在计算机视觉的重要性、基本技术和最新进展

    [摘要] 主要是文字检测和文字识别作为计算机视觉一部分的重要性,基本知识,面临的挑战,以及部分最新的成果. 人类认识了解世界的信息中91%来自视觉,同样计算机视觉成为机器认知世界的基础,也是人工智能研 ...

  4. 转:使用JSR-303进行校验 @Valid

    一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...

  5. 阿里巴巴主导的“华山版《Java 开发手册》”简介

    1."83行代码计划"项目介绍(转自github): 2018年9月22日,在2018杭州云栖大会上,召开<码出高效:Java 开发手册>新书发布会,并宣布将图书所有收 ...

  6. MySQL必知必会(使用函数处理数据)

    #文本处理函数 SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; SELE ...

  7. milvus安装及其使用教程

    milvus 简介 milvus是干什么的?通俗的讲,milvus可以让你在海量向量库中快速检索到和目标向量最相似的若干个向量,这里相似度量标准可以是内积或者欧式距离等.借用官方的话说就是: Milv ...

  8. 自定义 cell

    自定义 cell 1 什么是自定义 cell 自定义 cell 即 tableView,collectionView,scrollView中的 cell 使用的时候不能满足我们使用 cell 的需求, ...

  9. ACL(访问控制列表)

    第六部分,访问控制列表.访问控制列表(Access Control List,ACL) 是路由器和交换机接口的指令列表,用来控制端口进出的数据包.应用场景有校园网中教师网和学生网分别管理,通过acl控 ...

  10. K3cloud、erp系统实时滚动展示未处理数据,监控投诉处理进度

     痛点:企业内部erp人工记录产品投诉销售单,是否跟踪处理完客户投诉,结果不能实时透明,当天还有多少未解决的投诉单,也不能实时查看到,除非手工去系统单据查询,很不方便,跟踪也不顺畅!   解决方案:利 ...