.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的一些方式,这种模式比较适合那种一个项目中需要操作多种数据库的模式.不 ...
随机推荐
- 6.3.4 使用marshal 模块操作二进制文件
Python 标准库 marshal 也可以进行对象的序列化和反序列化,下面的代码进行了简单演示. import marshal x1 = 30 x2 = 5.0 x3 = [1,2,3] x4 = ...
- C# 派生类的XmlSerializer序列化XML
近段对XML 序列化进行处理,用XmlSerializer这个挺好用的. 但是对于派生类对象的XML的生成总会报错.因为同一个节点名称,不能反射为不同的对象.这个在网上找了好久,都说要利用反射来处理. ...
- Scrapy——5 下载中间件常用函数、scrapy怎么对接selenium、常用的Setting内置设置有哪些
Scrapy——5 下载中间件常用的函数 Scrapy怎样对接selenium 常用的setting内置设置 对接selenium实战 (Downloader Middleware)下载中间件常用函数 ...
- HDU 3208 Integer’s Power
Integer’s Power Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origina ...
- ZOJ 5579 Stean
Stean Time Limit: 1 Second Memory Limit: 65536 KB Special Judge Tom is good at making stea ...
- bx值
bx值 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem De ...
- noip模拟赛 拼不出的数
分析:如果每个数可以选任意多次,那么就是一个很普通的dp问题,这里每个数只能选一次,还是考虑dp,设f(i)表示1~i是否都能选上.考虑下一个数j,如果j > i + 1,那么i+1这个数就选不 ...
- ZooKeeper的应用场景(转)
应用场景1 :统一命名服务 分布式应用中,通常需要一套完备的命令机制,既能产生唯一的标识,又方便人识别和记忆. 我们知道,每个ZNode都可以由其路径唯一标识,路径本身也比较简洁直观,另外ZNode上 ...
- N天学习一个linux命令之umask
前言 umask不是linux命令,而是shell内置的指令,俗称用户权限掩码,用于对用户创建的文件和目录设置默认权限.默认的权限掩码是0022,也就是说新创建的文件权限是0644,新创建的目录权限是 ...
- HDU 5242 上海大都会 G题
这道题其实是求K条最长的不重叠的链.贪心算法+DFS即可求.深度优先搜索时,返回当前子树的最长链,使用优先队列保存其他孩子结点的最长链,即可.求结果时只需从优先队列中取前K个值的和.这相当于暴力删除每 ...