.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的一些方式,这种模式比较适合那种一个项目中需要操作多种数据库的模式.不 ...
随机推荐
- Tensorflow读取csv文件(转)
常用的直接读取方法实例:#加载包 import tensorflow as tf import os #设置工作目录 os.chdir("你自己的目录") #查看目录 print( ...
- 查看Linux中自带的jdk ,设置JAVA_HOME
在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos7是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java [r ...
- 洛谷 P3258 BZOJ 3631 [JLOI2014]松鼠的新家
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...
- [cogs729] [网络流24题#5] 圆桌聚餐 [网络流,最大流,多重二分图匹配]
建图:从源点向单位连边,边权为单位人数,从单位向圆桌连边,边权为1,从圆桌向汇点连边,边权为圆桌容量. #include <iostream> #include <algorithm ...
- CentOS的free命令
https://blog.csdn.net/for_tech/article/details/53044610 https://www.58jb.com/html/145.html
- Java排序算法之冒泡、选择、插入、快速
JavaSort Java经典排序算法代码 2018-1-26更新:冒泡排序,选择排序,插入排序,快速排序 1. 冒泡排序 特点:效率低,实现简单 思想(从小到大排): 第1个数和第2个数比较,如果第 ...
- hibernate之一对多映射
目录 第一章 课程简介 第二章 Hibernate中的单向一对多关联 2-1 一对多映射简介 2-2 hibernate的基础配置 2-3 创建HibernateUtil工具类 2-4 在mysql数 ...
- js递归解决汉诺塔问题
汉诺塔是一个印度的古老传说.有三个圆柱,其中一个圆柱上放着若干圆盘,这些圆盘从上到下,直径递增,利用一个辅助圆柱,将原来柱子上的圆盘放到另一个柱子上,依旧是从上到下直径递增. 汉诺塔是一个经典的递归案 ...
- UIScrollView滚动时隐藏底部导航栏问题
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"開始滚动"); int currentPostio ...
- 创造HTTPS的是个神
HTTP 是一个明文传输的协议,很多网络监听工具都可以轻易窃取网络中传输的用户信息,如密码,信用卡, 直到后来发明HTTPS, 世界一下子安静了 Why HTTPS? HTTPS可以保证用户提交的信息 ...