环境

Visual Studio 2017

最新版本的.NET Core 2.0 SDK

最新版本的 Windows PowerShell

开始搭建

1、在 Visual Studio 2017 中创建新项目

  • “文件”>“新建”>“项目”

  • 从左侧菜单中选择“已安装”>“模板”>“Visual C#”>“.NET Core”。

  • 选择“ASP.NET Core Web 应用程序”。

  • 输入“EFGetStarted.AspNetCore.NewDb”作为名称,然后单击“确定”。

  • 在“新建 ASP.NET Core Web 应用程序”对话框中:

    • 确保在下拉列表中选择“.NET Core”和“ASP.NET Core 2.0”选项

    • 选择“Web 应用程序(模型视图控制器)”项目模板

    • 确保将“身份验证”设置为“无身份验证”

    • 单击“确定”

2、安装 Entity Framework Core

  • 工具”>“NuGet 包管理器”>“包管理器控制台”

1.1、安装数据库提供程序

MsSql

运行:Install-Package Microsoft.EntityFrameworkCore.SqlServer

MySql

运行:柚子:Install-Package Pomelo.EntityFrameworkCore.MySql
或者
官方:Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.11

1.2、安装程序包管理器控制台
运行:Install-Package Microsoft.EntityFrameworkCore.Tools

1.3、安装设计包
运行:Install-Package Microsoft.EntityFrameworkCore.Design

数据据库提供程序设计包 (EF Core 2.0 不再需要)
MsSql

运行:Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
MySql

运行:Install-Package Pomelo.EntityFrameworkCore.MySql.Design

DB First——从现有数据库创建模型

MySql

运行:Scaffold-DbContext -Connection "Server=localhost;User Id=root;Password=123456;Database=vanfj" -Provider "Pomelo.EntityFrameworkCore.MySql" -OutputDir "Models"

MsSql

运行:Scaffold-DbContext -Connection "Server=localhost;User Id=root;Password=123456;Database=vanfj" -Provider "Microsoft.EntityFrameworkCore.SqlServer" -OutputDir "Models"

使用说明:将Connection中的连接字符串替换为自己的数据库连接,将OutputDir中的Models替换为自己要生成的文件目录名

Code First——从模型生成到数据库

1、创建模型

1.1、创建上下文

public class SchoolContext : DbContext

{

public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)

{

}

public DbSet<Course> Courses { get; set; }

public DbSet<Enrollment> Enrollments { get; set; }

public DbSet<Student> Students { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)

{

modelBuilder.Entity<Course>().ToTable("Course");

modelBuilder.Entity<Enrollment>().ToTable("Enrollment");

modelBuilder.Entity<Student>().ToTable("Student");

}

}

public class Student

{

public int ID { get; set; }

public string LastName { get; set; }

public string FirstMidName { get; set; }

public DateTime EnrollmentDate { get; set; }

public ICollection<Enrollment> Enrollments { get; set; }

}

public enum Grade

{

A, B, C, D, F

}

public class Enrollment

{

public int EnrollmentID { get; set; }

public int CourseID { get; set; }

public int StudentID { get; set; }

public Grade? Grade { get; set; }

public Course Course { get; set; }

public Student Student { get; set; }

}

{

A, B, C, D, F

}

public class Enrollment

{

public int EnrollmentID { get; set; }

public int CourseID { get; set; }

public int StudentID { get; set; }

public Grade? Grade { get; set; }

public Course Course { get; set; }

public Student Student { get; set; }

}

public class Course

{

[DatabaseGenerated(DatabaseGeneratedOption.None)]

public int CourseID { get; set; }

public string Title { get; set; }

public int Credits { get; set; }

public ICollection<Enrollment> Enrollments { get; set; }

}

1.2、Startup文件注入上下文

EF Core在版本 2.0 中,引入了一种在依赖关系注入中注册自定义 DbContext 类型的新方法,即以透明形式引入可重用 DbContext 实例的池。 
要使用 DbContext 池,请在服务注册期间使用 AddDbContextPool 而不是 AddDbContext

public void ConfigureServices(IServiceCollection services)

{

services.AddDbContextPool<SchoolContext>(options =>

options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));

services.AddMvc().AddJsonOptions(options =>

options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

}

1.3、appsettings.json文件添加连接字符串

{

"ConnectionStrings": {

"DefaultConnection": "Server=localhost;User Id=root;Password=123456;Database=vanfj"

},

"Logging": {

"IncludeScopes": false,

"LogLevel": {

"Default": "Warning"

}

}

}


2、执行NuGet命令,创建数据库

2.1、为迁移搭建基架

运行:Add-Migration InitialCreate

2.2、将新迁移应用到数据库

运行:Update-Database

EF Core 2.0 NuGet命令

Get-Help about_EntityFrameworkCore 获取EF Core命令帮助

添加一个迁移数据库 迁移的名称 目录(及其子命名空间)路径是相对于项目目录。 默认值为"Migrations"。
Add-Migration -Name <String> -OutputDir <String>
Add-Migration InitialCreate 第一次执行初始化用这个

删除上次的迁移数据库 不检查以查看迁移是否已应用到数据库。
Remove-Migration -Force

目标迁移。 如果为"0",将恢复所有迁移。 默认到最后一个迁移。
Update-Database 
Update-Database LastGoodMigration 还原迁移

删除数据库 显示的数据库会被丢弃,但没有删除它
Drop-Database -WhatIf

Get-DbContext 获取有关 DbContext 类型的信息

从数据库更新DbContext和实体的类型
Scaffold-DbContext 
-Connection <String> 数据库的连接字符串。
-Provider <String> 要使用的提供程序。 (例如 Microsoft.EntityFrameworkCore.SqlServer)
-OutputDir <String > 要将文件放入的目录。 路径是相对于项目目录。
--Context <String > 若要生成的 dbcontext 名称。
-Schemas <String[]> 要生成实体类型的表架构。
-Tables <String[]> 要生成实体类型的表。
-DataAnnotations 使用属性来配置该模型 (如果可能)。 如果省略,则使用仅 fluent API。
-UseDatabaseNames 使用直接从数据库表和列名称。
-Force 覆盖现有文件。

从迁移中生成的 SQL 脚本
Script-Migration
-From <String> 开始迁移。 默认值为 0 (初始数据库)
-To <String> 结束的迁移。 默认到最后一个迁移
-Idempotent 生成可以在任何迁移的数据库使用的脚本
-Output <String> 要将结果写入的文件

原文地址:https://www.cnblogs.com/lwc1st/p/8966347.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

EF Core 2.0使用MsSql/Mysql实现DB First和Code First相关推荐

  1. EF Core 3.0查询

    随着.NET Core 3.0的发布,EF Core 3.0也随之正式发布,关于这一块最近一段时间也没太多去关注,陆续会去对比之前版本有什么变化没有,本节我们来看下两个查询. 分组 我们知道在EF C ...

  2. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  3. core+2.0+mysql_【Asp.Net Core】ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

    好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...

  4. java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系

    1.EF6中通过EntityTypeConfiguration配置实体映射关系代码 public class AccountMap : EntityTypeConfiguration { public ...

  5. Entity Framework 6.3 和 EF Core 3.0 路线图

    尽管脱离了 .NET Core 发布循环,但是 EF Core 正在开发其 3.0 路线图.除此之外,还对原来的 Entity Framework 进行了一些重要的变更. 更多服务器端的查询 将 LI ...

  6. ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

    好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...

  7. MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  8. migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  9. sqlsugar对mysql效率高_基于.Net Core 2.0 + SqlSugar ORM + MySql快速实现网站开发

    .Net Core 2.0 (以下简称Core)正式版已经发布有一段时间了, 博主也第一时间尝鲜了, 相比Core 1.0和1.1类库支持方面提高了不少, 开发起来也方便快捷很多了. 废话不多说了, ...

最新文章

  1. 让机器“自愈化”引领新科技变革
  2. php 操作权限,liunx下PHP操作权限文件
  3. WPF实现Map加载
  4. 【javascript高级教程】JavaScript 字符串(String) 对象
  5. python RSA加密、解密、签名
  6. python 遍历文件夹
  7. lucene bug的报告经历
  8. VS2019如何修改字体大小
  9. 2019中国软件业务收入前百家企业名单公布
  10. php 差错,PHP 错误处理
  11. 安装java程序出错
  12. Xray扫描器SQL注入检测:sqldet
  13. Ubuntu下载软件包网速过慢的解决方法
  14. 阿里云服务器可以搭建游戏吗?
  15. python面向对象实验一之烤地瓜
  16. DirectX和OPenGL 与 UE4 U3D的关系是什么?
  17. js判断wifi_js判断手机是wifi还是流量
  18. 数学建模 数理统计模型
  19. 将Chrome浏览器网页背景改成豆绿色
  20. 基于AVX256指令集和多线程优化的双机计算加速程序

热门文章

  1. 没有人会觉得正则表达式难写
  2. 阿里云ECS,搭建MySQL5.7数据库环境
  3. WinAPI: 钩子回调函数之 MouseProc
  4. 想说爱你不容易 | 使用最小 WEB API 实现文件上传(Swagger 支持)
  5. 浅谈.Net异步编程的前世今生----EAP篇
  6. 如何将 Linq 的查询结果转为 HashSet ?
  7. WPF中一个通用的BoolToXXX转换类
  8. 在VS Code中执行SQL查询,是怎样一种体验?
  9. 腾讯招.NET要求以下几点,你准备好了吗?
  10. 数据写入规则IBufferWriterT