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

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);
        }
    }
}
View Code

相关文章:

猜你喜欢
相关资源
相似解决方案