.NET Core & EntityFrameworkCore
前言
.NET Core 相比于 .NET Fromework 有跨平台、轻量化且开源的优势。
在使用 EntityFrameworkCore 的时候也遇到了很多问题,至于网络上的教程嘛...大部分都是老版本 project.json 的。而在v1.1.0版本时, .NET Core 已经放弃使用 project.json 而改为使用 *.csproj 配置文件(与 Visual Studio 相同)。
创建项目
- 在 CLI(本例中是cmd.exe) 中执行 - md MVC创建项目目录。
- 执行 - cd MVC进入目录。
- 执行 - 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.
 
- 执行 - 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\
 
- 执行 - 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 的各种引用
- 打开 - MVC.csproj项目配置文件,添加代码段。- 可以在微软官方文档 .NET Command Line Tools 中找到相关信息。
 - <ItemGroup>
 <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
 </ItemGroup>
 
- 再次执行 - 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.
 ...
 
- 执行 - 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'.
 
- 执行 - dotnet add package Microsoft.EntityFrameworkCore.SqlServer添加包引用- 可以在 aspnet/EntityFramework 上找到对应的数据库配置信息包。
 
- 执行 - 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个命令来完成数据库同步操作
- dotnet ef migrations add命令来添加迁移信息
- dotnet ef database update执行数据库迁移操作
 
参考资料
.NET Core & EntityFrameworkCore的更多相关文章
- ASP.NET Core开发者成长路线图
		目录 ASP.NET Core开发者路线图RoadMap 免责声明 请给一个星星! ⭐ 路线图 资源 总结 贡献 许可协议 ASP.NET Core开发者路线图RoadMap 来源: MoienTaj ... 
- ASP.NET Core开发者指南
		ASP.NET Core开发者指南 2019年ASP.NET Core开发者指南: 你可以在下面找到一张图,该图展示了你可以选取的路径及你想学习的库,从而成为一名 ASP.NET Core 开发者.“ ... 
- 2019年ASP.NET Core学习路线
		- [先决条件] + C# + Entity Framework + ASP.NET Core + SQL 基础知识 - [通用开发技能] + 学习 GIT, 在 GitHub 中创建开源项目 + 掌 ... 
- ASP.NET Core开发者指南(转发)
		ASP.NET Core开发者指南 2019年ASP.NET Core开发者指南: 你可以在下面找到一张图,该图展示了你可以选取的路径及你想学习的库,从而成为一名 ASP.NET Core 开发者.& ... 
- 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库
		两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ... 
- 从我做起[原生DI实现模块化和批量注入].Net Core 之一
		实现模块化注册 .Net Core实现模块化批量注入 我将新建一个项目从头开始项目名称Sukt.Core. 该项目分层如下: Sukt.Core.API 为前端提供APi接口(里面尽量不存在业务逻辑, ... 
- Abp vNext 基础篇丨分层架构
		介绍 本章节对 ABP 框架进行一个简单的介绍,摘自ABP官方,后面会在使用过程中对各个知识点进行细致的讲解. 领域驱动设计 领域驱动设计(简称:DDD)是一种针对复杂需求的软件开发方法.将软件实现与 ... 
- github action 实现CI/CD
		两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ... 
- ASP.NET Core:使用EntityFrameworkCore操作MySql来丰富仓储模块
		概述 上一篇简单介绍了Dapper的基本用法,数据的存储为SqlServer.那么这一篇就记录一下使用EFCore来操作MySql的一些方式,这种模式比较适合那种一个项目中需要操作多种数据库的模式.不 ... 
随机推荐
- C#关键字详解第一节
			abstract:抽象类: 他表达对问题或者实际中的事物,对象等所设计出的抽象概念,比如一个灵感.生物等,这些都是抽像, 但是他们往往也有具体的指向,比如生物圈有人类,猴子,老虎等等,老虎和人类是实际 ... 
- selenium等待
			简介 在selenium操作浏览器的过程中,每一次请求url,selenium都会等待页面加载完成以后, 才会将操作权限在交给我们的程序. 但是,由于ajax和各种JS代码的异步加载问题,当一个页面被 ... 
- 【codeforces 515D】Drazil and Tiles
			[题目链接]:http://codeforces.com/contest/515/problem/D [题意] 给你一个n*m的格子; 然后让你用1*2的长方形去填格子的空缺; 如果有填满的方案且方案 ... 
- Spring+SpringMVC+MyBatis整合教程
			1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ... 
- 清北学堂模拟赛d2t3 逆序对(pair)
			题目描述LYK最近在研究逆序对.这个问题是这样的.一开始LYK有一个2^n长度的数组ai.LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设n=4,k=2,则a[1],a ... 
- 洛谷—— P3576 [POI2014]MRO-Ant colony
			https://www.luogu.org/problem/show?pid=3576 题目描述 The ants are scavenging an abandoned ant hill in se ... 
- Spring MVC中<mvc:annotation-driven />和<context:annotation-config />的区别分析
			个人最简单的使用理解: <mvc:annotation-driven />是管理静态资源的,比如静态页面,返回JSON这些. <context:annotation-config / ... 
- 使用Visual Studio Code调试Electron主进程
			1.打开VS Code,使用文件->打开,打开程序目录 2.切换到调试选项卡 3.打开launch.json配置文件 4.在“附加到进程”节点上增加localhost配置 5.使用命令行启动el ... 
- Java API 读取HDFS的单文件
			HDFS上的单文件: -bash-3.2$ hadoop fs -ls /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_categor ... 
- 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程
			我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ... 
