前言

.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. CodeForces - 284C - Cows and Sequence

    先上题目: C. Cows and Sequence time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  2. 用R语言 画条形图(基于ggplot2包)

    1.用qplot(x,data=data,geom.=”bar”,weight=y)+scale_y_continuous("y")画出y关于x的条形. 图中提示binwidth这 ...

  3. 51nod——1432 独木桥

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1432 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 ...

  4. RDS MySQL 表上 Metadata lock 的产生和处理

    https://help.aliyun.com/knowledge_detail/41723.html?spm=5176.7841698.2.18.vNfPM3

  5. iOS:制作左右侧滑(抽屉式)菜单

    感谢控件作者:https://github.com/SocialObjects-Software/AMSlideMenu 首先上效果图: 这里我们使用AMSlideMenu来实现左右侧滑菜单的效果.控 ...

  6. gradle配置国内的镜像

    gradle配置国内的镜像 学习了:http://blog.csdn.net/stdupanda/article/details/72724181 http://blog.csdn.net/lj402 ...

  7. [Vue-rx] Access Events from Vue.js Templates as RxJS Streams with domStreams

    The domStreams component property enables you to access Events from your Vue.js templates as Streams ...

  8. 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法

    此处共同拥有两段代码: 一. 这段代码比較全面,当中參考了github上的相关源代码. 能够说功能强大. //Dijkstra(迪杰斯特拉算法) #include <stdio.h> #i ...

  9. sql server 2008安装图解

    本篇文章介绍了安装SQL Server 2008企业版的软硬件配置要求,安装过程的具体步骤,以及须要注意的事项. 步骤/方法 1 在这里我们将用图解的方式.来介绍SQL Server 2008安装和配 ...

  10. Catalyst 2960 and 2960-S Software -Configuring VTP

    http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst2960/software/release/12-2_53_se/configura ...