EF Core 2.2 对多个 DbContext 多个数据库的情况进行迁移的示例
场景
在一个项目中,使用了多个 DbContext 且每个 DbContext 对应一个数据库的情况
创建新项目
打开 Visual Studio 2017
“文件”>“新建”>“项目”
从左菜单中选择“已安装”>“Visual C#”>“.NET Core”。
选择“ASP.NET Core Web 应用程序”。
输入“WebApplication”作为名称,然后单击“确定”。
在“新建 ASP.NET Core Web 应用程序”对话框中:
确保在下拉列表中选择“.NET Core”和“ASP.NET Core 2.1”
选择“Web 应用程序(模型视图控制器)”项目模板
确保将“身份验证”设置为“无身份验证”
单击“确定”


创建第一个模型
右键单击“Models”文件夹,然后选择“添加”>“类”。
输入“FirstModel.cs”作为名称,然后单击“确定”。
将此文件的内容替换为以下代码:
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore; namespace WebApplication.Models
{
public class FirstDbContext : DbContext
{
public FirstDbContext(DbContextOptions<FirstDbContext> options)
: base(options)
{ } public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
} public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; } public ICollection<Post> Posts { get; set; }
} public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; } public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
生产应用通常会将每个类放在单独的文件中。 为简单起见,本教程将这些类放在一个文件中。
创建第二个模型
右键单击“Models”文件夹,然后选择“添加”>“类”。
输入“SecondModel.cs”作为名称,然后单击“确定”。
将此文件的内容替换为以下代码:
using Microsoft.EntityFrameworkCore; namespace WebApplication.Models
{
public class SecondDbContext : DbContext
{
public SecondDbContext(DbContextOptions<SecondDbContext> options)
: base(options)
{ } public DbSet<Student> Students { get; set; }
} public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
}
生产应用通常会将每个类放在单独的文件中。 为简单起见,本教程将这些类放在一个文件中。
至此,项目的目录结构如下:

使用依赖注入注册上下文
若要使 FirstDbContext 和 SecondDbContext 可用于 MVC 控制器,请在 Startup.cs 中将其注册为服务。
在应用程序启动过程中,通过依赖关系注入 注册服务(如 FirstDbContext),以便能够通过构造函数的参数和属性向使用服务的组件(如 MVC 控制器)自动提供该服务。
在 Startup.cs 中,添加以下 using 语句:
using WebApplication.Models;
using Microsoft.EntityFrameworkCore;
将以下
手动高亮的代码添加到ConfigureServices方法:public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); var connection = @"Server=你的数据库地址;Database=FirstDbContext;User Id=你的数据库账号;Password=你的数据库密码;"; // 手动高亮
services.AddDbContext<FirstDbContext> // 手动高亮
(options => options.UseSqlServer(connection)); // 手动高亮 var secondDbconnection = @"Server=你的数据库地址;Database=SecondDbContext;User Id=你的数据库账号;Password=你的数据库密码;"; // 手动高亮
services.AddDbContext<SecondDbContext> // 手动高亮
(options => options.UseSqlServer(secondDbconnection)); // 手动高亮
}
生产应用通常会将连接字符串放在配置文件或环境变量中。 为简单起见,本教程在代码中定义它。
创建数据库
以下步骤使用迁移创建数据库。
“工具”>“NuGet 包管理器”>“包管理器控制台”
运行以下命令创建
FirstDbContext的迁移:Add-Migration InitialCreate -Context FirstDbContext -OutputDir Migrations\FirstDbContextMigrations
Update-Database -Context FirstDbContext
-Context 参数表示要使用的
DbContext类,请参阅这里了解详细信息。“工具”>“NuGet 包管理器”>“包管理器控制台”
运行以下命令创建
SecondDbContext的迁移:Add-Migration InitialCreate -Context SecondDbContext -OutputDir Migrations\SecondDbContextMigrations
Update-Database -Context SecondDbContext
至此,项目的目录结构如下:

数据库如下:

EF Core 2.2 对多个 DbContext 多个数据库的情况进行迁移的示例的更多相关文章
- EF Core 2.2 对多个 DbContext 单个数据库的情况进行迁移的示例
目录 场景 创建新项目 创建第一个模型 创建第二个模型 使用依赖注入注册上下文 创建数据库 需要注意的情况 场景 在一个项目中,使用了多个 DbContext 且使用同一个数据库的情况 创建新项目 打 ...
- EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的
我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...
- EF Core 快速上手——创建应用的DbContext
系列文章 EF Core 快速上手--EF Core 入门 EF Core 快速上手--EF Core的三种主要关系类型 本节导航 定义应用的DbContext 创建DbContext的一个实例 创建 ...
- [.NET Core] - 使用 EF Core 的 Scaffold-DbContext 脚手架命令创建 DbContext
Scaffold-DbContext 命令 参数 Scaffold-DbContext [-Connection] <String> [-Provider] <String> ...
- [翻译 EF Core in Action 2.2] 创建应用程序的数据库上下文
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- EF Core 2.0中怎么用DB First通过数据库来生成实体
要在EF Core使用DB First首先要下载三个Nuget包,在Nuget的Package Manager Console窗口中依次敲入下面三个命令即可: Microsoft.EntityFram ...
- EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况
使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...
- EF Core 2.0 新特性
前言 目前 EF Core 的最新版本为 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明. 注意:如果你要在Visual Studio 中使用 .NET Core 2 ...
- 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询
前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...
随机推荐
- MySQL物理备份 lvm-snapshot
MySQL备份之 lvm-snapshot lvm-snapshot(工具备份) 优点: 几乎是热备(穿件快照前把表上锁,创建完成后立即释放) 支持所有引擎 备份速度快 无需使用昂贵的商业软件(它是操 ...
- CF 1145 (愚人节比赛)
D题 题目就是让你找出题面中拼错的单词,拼错的字母组合成一句话就是正确的题面. two plus xor of third and min elements #include<bits/stdc ...
- LOJ#2085 循环之美
解:首先看这个纯循环到底是什么玩意..... 经过一番打表,发现纯循环小数就是分母与进制互质的既约分数. #include <bits/stdc++.h> std::bitset<& ...
- Python 下划线
单下划线 "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和自类对象自己能访问到这些变量. 例子:以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口 ...
- Gradle里面两个 依赖管理插件,可以不用关心 具体jar版本号
引用:https://spring.io/blog/2015/02/23/better-dependency-management-for-gradle Using the plugin with S ...
- Java调用第三方http接口的方式
1. 概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适.很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信.天气等). 在J ...
- 关于python环境配置的博客收藏
使用anaconda的pip来扩展anaconda的库: https://www.cnblogs.com/duan-qs/p/6289339.html 一个.py文件如何调用另一个.py文件中的类和函 ...
- HttpClient基本使用
1.在pom.xml加入对httpclient的必需的jar包的依赖 <!--//httpclient的接口基本都在这儿--> <dependency> <groupId ...
- EOCS跨链核心技术内幕
EOCS跨链技术的核心就是ICP模块,ICP即Inter Chain Protocol(跨链交互协议),下面着重介绍ICP工作原理和实现细节. Inter Chain Protocol(ICP) IC ...
- windows powershell上批量修改文件名称
$i = Get-ChildItem -Path c:\pictures -Filter *.jpg | ForEach-Object { $extension = $_.Extension $new ...