场景

在一个项目中,使用了多个 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; }
    }
    }

    生产应用通常会将每个类放在单独的文件中。 为简单起见,本教程将这些类放在一个文件中。

  • 至此,项目的目录结构如下:

使用依赖注入注册上下文

若要使 FirstDbContextSecondDbContext 可用于 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 多个数据库的情况进行迁移的示例的更多相关文章

  1. EF Core 2.2 对多个 DbContext 单个数据库的情况进行迁移的示例

    目录 场景 创建新项目 创建第一个模型 创建第二个模型 使用依赖注入注册上下文 创建数据库 需要注意的情况 场景 在一个项目中,使用了多个 DbContext 且使用同一个数据库的情况 创建新项目 打 ...

  2. EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的

    我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...

  3. EF Core 快速上手——创建应用的DbContext

    系列文章 EF Core 快速上手--EF Core 入门 EF Core 快速上手--EF Core的三种主要关系类型 本节导航 定义应用的DbContext 创建DbContext的一个实例 创建 ...

  4. [.NET Core] - 使用 EF Core 的 Scaffold-DbContext 脚手架命令创建 DbContext

    Scaffold-DbContext 命令 参数 Scaffold-DbContext [-Connection] <String> [-Provider] <String> ...

  5. [翻译 EF Core in Action 2.2] 创建应用程序的数据库上下文

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  6. EF Core 2.0中怎么用DB First通过数据库来生成实体

    要在EF Core使用DB First首先要下载三个Nuget包,在Nuget的Package Manager Console窗口中依次敲入下面三个命令即可: Microsoft.EntityFram ...

  7. EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况

    使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...

  8. EF Core 2.0 新特性

    前言 目前 EF Core 的最新版本为 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明. 注意:如果你要在Visual Studio 中使用 .NET Core 2 ...

  9. 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询

    前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...

随机推荐

  1. 树莓派wiringPi,BCM,BOARD编码对应管脚

    wiringPi,BCM,BOARD编码 由于上课需要, 嵌入式学习从树莓派开始 树莓派中执行: $> gpio readall 即可得到关于树莓派管脚的各种信息 上面的图可能不是特别清楚, 可 ...

  2. Spring bean实例化的方式

    实例化过程如图,方式如图. 甩代码. 方式一:构造方法 搞一个bean,修改一下xml配置 package com.itheima.instance.constructor; public class ...

  3. jmeter+maven+jenkins自动化接口测试(下)

    maven+jmeter已经写好了,可以通过maven来执行jmeter的接口测试脚本,怎样实现定时执行测试并发送报告邮件就需要通过jenkins了(jmeter或者testng也可以结合不同的邮件j ...

  4. 第三周java学习总结

    学号 20175206 <Java程序设计>第三周学习总结 教材学习内容总结 本周为第四章的学习,分为以下几个方面: 1.包与代码组织 2.String类 3.对象创建 4.包装类 经过代 ...

  5. 【转载】Nginx + Tomcat 实现反向代理

    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服 ...

  6. IE7下使用兼容Icon-Font CSS类

    Iconfont在IE7下需要使用unicode方式,但是这种方式不太方便,使用以下代码可使IE7像普通用法使用. @font-face {font-family: "anticon&quo ...

  7. java校验字符串是否为json格式

    觉得挺好玩的一个问题,如何校验字符串是否为标准的json格式,刚开始的回答是jsonObject或者jsonArray转换一下,如果可以转换,说明为json字符串,如果不能就抛出异常,捕获异常. 但是 ...

  8. PHP带参数传值调用python脚本

    PHP主要用在服务器端做网站后台开发,有些功能用PHP来实现有点费劲或者无法实现,现在在学习python,同样是脚本语言,感觉python能做的事情PHP不一定能胜任.但是现在大部分的网站后台也是用P ...

  9. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  10. LTPS、IGZO、OLED都是什么?【转】

    转自:https://www.sohu.com/a/226454503_99913194 薄化行业的小伙伴,经常有听到LTPS.IGZO.OLED等英文缩写名词.但究竟他们是什么意思?他们之间有什么区 ...