前言

.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. mysql-索引、导入、导出、备份、恢复

    1.索引 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进行 ...

  2. sha2 替换sha1 时间表

    由于sha1签名算法进入淘汰阶段,逐渐弃用中,sha1升级为sha2是大势所趋. 微软已经正式发布sha1弃用策略: http://blogs.technet.com/b/pki/archive/20 ...

  3. 【Codeforces 1106C】Lunar New Year and Number Division

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 看了下样例解释就懂了... 每次选择最大最小的两个组合 然后加起来.. [代码] import java.io.IOException; im ...

  4. 【[Offer收割]编程练习赛13 D】骑士游历(矩阵模板,乘法,加法,乘方)

    [题目链接]:http://hihocoder.com/problemset/problem/1504 [题意] [题解] 可以把二维的坐标转成成一维的; 即(x,y)->(x-1)*8+y 然 ...

  5. Object Detection: To Be Higher Accuracy and Faster

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51597496 在深度学习中有一类研究热 ...

  6. 运维系列之一 Linux的文件与目录权限解析

    在Linux中,万事万物皆文件,普通文件是文件,目录是文件,硬件设备也是文件,因此学习了解Linux中的文件非常重要. Linux中有三种文件类型: (1) 普通文件:又分为文本文件和二进制文件 (2 ...

  7. CODEVS——T 2969 角谷猜想

    http://codevs.cn/problem/2969/  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descri ...

  8. springcloud(十一):服务网关Zuul高级篇

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  9. dba 和 rdba 转载

    一.  DB(Data block)   A data block is the smallest unit of storage in an Oracle database. Every datab ...

  10. 对于HBase的MapReduce性能提升方案之BulkLoad

    我们知道,在第一次海量数据批量入库时,我们会选择使用BulkLoad的方式. 简单介绍一下BulkLoad原理方式:(1)通过MapReduce的方式,在Map或者Reduce端将输出格式化为HBas ...