前言

.NET Core 相比于 .NET Fromework 有跨平台、轻量化且开源的优势。

在使用 EntityFrameworkCore 的时候也遇到了很多问题,至于网络上的教程嘛...大部分都是老版本 project.json 的。而在v1.1.0版本时, .NET Core 已经放弃使用 project.json 而改为使用 *.csproj 配置文件(与 Visual Studio 相同)。

创建项目

  1. 在 CLI(本例中是cmd.exe) 中执行 md MVC 创建项目目录。

  2. 执行 cd MVC 进入目录。

  3. 执行 dotnet new mvc 创建一个MVC类型的项目。

    D:\-\DotNetCore\MVC>dotnet new mvc
    Content generation time: 457.6164 ms
    The template "ASP.NET Core Web App" created successfully.
  4. 执行 dotnet restore 来还原依赖文件。

    D:\-\DotNetCore\MVC>dotnet restore
    Generating MSBuild file
    ...
    NuGet Config files used:
    C:\Users\ASUS\AppData\Roaming\NuGet\NuGet.Config
    C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config Feeds used:
    https://api.nuget.org/v3/index.json
    C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
  5. 执行 dotnet run 来测试是否成功创建了项目。

    D:\-\DotNetCore\MVC>dotnet run
    Hosting environment: Production
    Content root path: D:\-\DotNetCore\MVC
    Now listening on: http://localhost:5000
    Application started. Press Ctrl+C to shut down.

如此,一个基于 .NET Core 的 MVC 项目便已经成功创建。

添加 EntityFrameworkCore 的各种引用

  1. 打开 MVC.csproj 项目配置文件,添加代码段。

    <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
    </ItemGroup>
  2. 再次执行 dotnet restore 来还原 EntityFrameworkCore.Tool 工具。

    Restoring packages for D:\-\DotNetCore\MVC\MVC.csproj...
    Restoring packages for D:\-\DotNetCore\MVC\MVC.csproj...
    Installing Microsoft.NETCore.Jit 1.0.2.
    Installing System.Net.Security 4.0.0.
    Installing Microsoft.NETCore.Runtime.CoreCLR 1.0.2.
    Installing Microsoft.NETCore.DotNetHostPolicy 1.0.1.
    Installing Microsoft.NETCore.App 1.0.0.
    Installing Microsoft.EntityFrameworkCore.Tools.DotNet 1.0.0.
    Restore completed in 1.2 sec for D:\-\DotNetCore\MVC\MVC.csproj.
    ...
  3. 执行 dotnet add package Microsoft.EntityFrameworkCore.Design 添加包

    D:\-\DotNetCore\MVC>dotnet add package Microsoft.EntityFrameworkCore.Design
    Microsoft (R) Build Engine version 15.1.1012.6693
    Copyright (C) Microsoft Corporation. All rights reserved. Writing
    ...
    info : PackageReference for package 'Microsoft.EntityFrameworkCore.Design' version '1.1.2' added to file 'D:\-\DotNetCore\MVC\MVC.csproj'.
  4. 执行 dotnet add package Microsoft.EntityFrameworkCore.SqlServer 添加包引用

  5. 执行 dotnet restore 来还原各种包

    • 执行 dotnet ef 来测试 EntityFrameworkCore.Tool 是否成功安装
                          _/\__
      ---==/ \\
      ___ ___ |. \|\
      | __|| __| | ) \\\
      | _| | _| \_/ | //|\\
      |___||_| / \\\/\\

使用 Code-First

创建实体模型并配置 DbContext 信息,如同在其他 MVC 项目中使用 EF 一般。

//Machine.cs
using System.ComponentModel.DataAnnotations; namespace MVC{
public class Machine{
[Key]
public int Id{ get; set; }
[Required]
public string Title { get; set; }
public string Memo { get; set; }
}
} //MyContext.cs
using Microsoft.EntityFrameworkCore; namespace MVC
{
public class MyContext : DbContext
{
public virtual DbSet<Machine> Machine { get; set; }
}
}

添加数据库配置

// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(); services.AddDbContext<MyContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyContext")));
} //MyContext.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration; namespace MVC
{
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> option)
: base(option) { } public virtual DbSet<Machine> Machine { get; set; }
}
}

appsettings.json 中添加数据库连接配置节

//appsettings.json
"ConnectionStrings": {
"MyContext": "Server=(localdb)\\mssqllocaldb;Database=DB1;Trusted_Connection=True;MultipleActiveResultSets=true"
}

使用 dotnet-database 创建数据库

执行 dotnet ef database update 来创建数据库

D:\-\DotNetCore\MVC>dotnet ef database update

Build succeeded.
0 Warning(s)
0 Error(s) Time Elapsed 00:00:03.59
Done.

然后我们可以查看表结构

SELECT * FROM INFORMATION_SCHEMA.TABLES;
TABLE_CATALOG TABLE_SCHEMA TABEE_NAME TABLE_TYPE
DB1 dbo __EFMigrationsHistory BASE TABLE

使用 dotnet-migration 更新数据库

我们通过 dotnet ef migrations add init (命名可以随意)来添加一个迁移描述文件。

D:\-\DotNetCore\MVC>dotnet ef migrations add init

Build succeeded.
0 Warning(s)
0 Error(s) Time Elapsed 00:00:03.11
Done. To undo this action, use 'ef migrations remove'

执行 dotnet ef database update 来更新模型到数据库

TABLE_CATALOG TABLE_SCHEMA TABEE_NAME TABLE_TYPE
DB1 dbo __EFMigrationsHistory BASE TABLE
DB1 dbo Machine BASE TABLE

后记

  • dotnet add package 命令可以添加 package 引用(就像 NuGet 一样)
  • 在项目引用信息更改之后记得 dotnet restore 来还原 package
  • 下次修改 Model 之后,我们可以使用2个命令来完成数据库同步操作
    1. dotnet ef migrations add 命令来添加迁移信息
    2. dotnet ef database update 执行数据库迁移操作

参考资料

  1. Working with SQL Server LocalDB
  2. .NET Core
  3. .NET Command Line Tools
  4. EntityFrameworkCore v1.1.1 问题汇总

.NET Core & EntityFrameworkCore的更多相关文章

  1. ASP.NET Core开发者成长路线图

    目录 ASP.NET Core开发者路线图RoadMap 免责声明 请给一个星星! ⭐ 路线图 资源 总结 贡献 许可协议 ASP.NET Core开发者路线图RoadMap 来源: MoienTaj ...

  2. ASP.NET Core开发者指南

    ASP.NET Core开发者指南 2019年ASP.NET Core开发者指南: 你可以在下面找到一张图,该图展示了你可以选取的路径及你想学习的库,从而成为一名 ASP.NET Core 开发者.“ ...

  3. 2019年ASP.NET Core学习路线

    - [先决条件] + C# + Entity Framework + ASP.NET Core + SQL 基础知识 - [通用开发技能] + 学习 GIT, 在 GitHub 中创建开源项目 + 掌 ...

  4. ASP.NET Core开发者指南(转发)

    ASP.NET Core开发者指南 2019年ASP.NET Core开发者指南: 你可以在下面找到一张图,该图展示了你可以选取的路径及你想学习的库,从而成为一名 ASP.NET Core 开发者.& ...

  5. 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  6. 从我做起[原生DI实现模块化和批量注入].Net Core 之一

    实现模块化注册 .Net Core实现模块化批量注入 我将新建一个项目从头开始项目名称Sukt.Core. 该项目分层如下: Sukt.Core.API 为前端提供APi接口(里面尽量不存在业务逻辑, ...

  7. Abp vNext 基础篇丨分层架构

    介绍 本章节对 ABP 框架进行一个简单的介绍,摘自ABP官方,后面会在使用过程中对各个知识点进行细致的讲解. 领域驱动设计 领域驱动设计(简称:DDD)是一种针对复杂需求的软件开发方法.将软件实现与 ...

  8. github action 实现CI/CD

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  9. ASP.NET Core:使用EntityFrameworkCore操作MySql来丰富仓储模块

    概述 上一篇简单介绍了Dapper的基本用法,数据的存储为SqlServer.那么这一篇就记录一下使用EFCore来操作MySql的一些方式,这种模式比较适合那种一个项目中需要操作多种数据库的模式.不 ...

随机推荐

  1. C#关键字详解第一节

    abstract:抽象类: 他表达对问题或者实际中的事物,对象等所设计出的抽象概念,比如一个灵感.生物等,这些都是抽像, 但是他们往往也有具体的指向,比如生物圈有人类,猴子,老虎等等,老虎和人类是实际 ...

  2. selenium等待

    简介 在selenium操作浏览器的过程中,每一次请求url,selenium都会等待页面加载完成以后, 才会将操作权限在交给我们的程序. 但是,由于ajax和各种JS代码的异步加载问题,当一个页面被 ...

  3. 【codeforces 515D】Drazil and Tiles

    [题目链接]:http://codeforces.com/contest/515/problem/D [题意] 给你一个n*m的格子; 然后让你用1*2的长方形去填格子的空缺; 如果有填满的方案且方案 ...

  4. Spring+SpringMVC+MyBatis整合教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  5. 清北学堂模拟赛d2t3 逆序对(pair)

    题目描述LYK最近在研究逆序对.这个问题是这样的.一开始LYK有一个2^n长度的数组ai.LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设n=4,k=2,则a[1],a ...

  6. 洛谷—— P3576 [POI2014]MRO-Ant colony

    https://www.luogu.org/problem/show?pid=3576 题目描述 The ants are scavenging an abandoned ant hill in se ...

  7. Spring MVC中<mvc:annotation-driven />和<context:annotation-config />的区别分析

    个人最简单的使用理解: <mvc:annotation-driven />是管理静态资源的,比如静态页面,返回JSON这些. <context:annotation-config / ...

  8. 使用Visual Studio Code调试Electron主进程

    1.打开VS Code,使用文件->打开,打开程序目录 2.切换到调试选项卡 3.打开launch.json配置文件 4.在“附加到进程”节点上增加localhost配置 5.使用命令行启动el ...

  9. Java API 读取HDFS的单文件

    HDFS上的单文件: -bash-3.2$ hadoop fs -ls /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_categor ...

  10. 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程

    我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...