.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的一些方式,这种模式比较适合那种一个项目中需要操作多种数据库的模式.不 ...
随机推荐
- 实验十二 团队作业8:软件测试与Alpha冲刺 第三天
项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 作业链接地址 团队名称 always run 作业学习目标 (1)掌握软件测试基础技术.(2)学习迭代式增量软件开发过程(Scrum) ...
- asp.net 跨域问题
asp.net 跨域问题 解决方案1: public void ProcessRequest(HttpContext context) { //解决跨域问题 context.Response.Clea ...
- [bzoj1812][IOI2006]riv_多叉树转二叉树_树形dp
riv bzoj-1812 IOI-2006 题目大意:给定一棵n个点树,要求在上面建立k个收集站.点有点权,边有边权,整棵树的代价是每个点的点权乘以它和它的最近的祖先收集站的距离积的和. 注释:$1 ...
- cogs 259. 亲戚
259. 亲戚 ★ 输入文件:relations.in 输出文件:relations.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 或许你并不知道,你 ...
- 35岁,成就寥寥,为时已晚?(I am 35 and I haven't achieved much in life. Is it too late?)
今天无意中看到Quora上的一个问题: I am 35 and I haven't achieved much in life. Is it too late? 下面的一个排第二的回复我蛮喜欢的,直接 ...
- POJ 2960
也算是一道模板题吧,只需按照SG函数的定义求出每个值的SG,然后异或就可以了. #include <iostream> #include <cstdio> #include & ...
- iOS中UITextView的操作技巧
刚才看了一篇textView实现placeholder的文章,有兴趣的同学们能够看下:__biz=MzA3NzM0NzkxMQ==&mid=211846438&idx=1&sn ...
- git 的安装和使用
安装Git 下载并安装 mysysgit 下载并安装 git windows版本号 配置Git 设置你的名字和邮箱 git config --global user.name "xxxx&q ...
- HDU 3572 Task Schedule(ISAP模板&&最大流问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3572 题意:m台机器.须要做n个任务. 第i个任务.你须要使用机器Pi天,且这个任务要在[Si , ...
- 运用smali自己主动注入技术分析android应用程序行为
如今android开发人员社区里,除了app开发外,还有非常多周边的工具类产品,比方安全.性能等,app产品 已经出现了巨无霸,可是工具类的产品.眼下还没有出现规模比較大的公司,大部分还处于创业阶段, ...