前言

.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. 实验十二 团队作业8:软件测试与Alpha冲刺 第三天

    项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 作业链接地址 团队名称 always run 作业学习目标 (1)掌握软件测试基础技术.(2)学习迭代式增量软件开发过程(Scrum) ...

  2. asp.net 跨域问题

    asp.net 跨域问题 解决方案1: public void ProcessRequest(HttpContext context) { //解决跨域问题 context.Response.Clea ...

  3. [bzoj1812][IOI2006]riv_多叉树转二叉树_树形dp

    riv bzoj-1812 IOI-2006 题目大意:给定一棵n个点树,要求在上面建立k个收集站.点有点权,边有边权,整棵树的代价是每个点的点权乘以它和它的最近的祖先收集站的距离积的和. 注释:$1 ...

  4. cogs 259. 亲戚

    259. 亲戚 ★   输入文件:relations.in   输出文件:relations.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]     或许你并不知道,你 ...

  5. 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? 下面的一个排第二的回复我蛮喜欢的,直接 ...

  6. POJ 2960

    也算是一道模板题吧,只需按照SG函数的定义求出每个值的SG,然后异或就可以了. #include <iostream> #include <cstdio> #include & ...

  7. iOS中UITextView的操作技巧

    刚才看了一篇textView实现placeholder的文章,有兴趣的同学们能够看下:__biz=MzA3NzM0NzkxMQ==&mid=211846438&idx=1&sn ...

  8. git 的安装和使用

    安装Git 下载并安装 mysysgit 下载并安装 git windows版本号 配置Git 设置你的名字和邮箱 git config --global user.name "xxxx&q ...

  9. HDU 3572 Task Schedule(ISAP模板&amp;&amp;最大流问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3572 题意:m台机器.须要做n个任务. 第i个任务.你须要使用机器Pi天,且这个任务要在[Si  , ...

  10. 运用smali自己主动注入技术分析android应用程序行为

    如今android开发人员社区里,除了app开发外,还有非常多周边的工具类产品,比方安全.性能等,app产品 已经出现了巨无霸,可是工具类的产品.眼下还没有出现规模比較大的公司,大部分还处于创业阶段, ...