返回顶部
首页 > 资讯 > 精选 >Asp.Net Core中如何创建多DbContext并迁移到数据库
  • 226
分享到

Asp.Net Core中如何创建多DbContext并迁移到数据库

2023-06-07 14:06:49 226人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关ASP.net core中如何创建多DbContext并迁移到数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  在我们的项目中我们有时候需要在我们的项目中创建DbContext,而

这篇文章给大家分享的是有关ASP.net core中如何创建多DbContext并迁移到数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

  在我们的项目中我们有时候需要在我们的项目中创建DbContext,而且这些DbContext之间有明显的界限,比如系统中两个DbContext一个是和整个数据库的权限相关的内容而另外一个DbContext则主要是和具体业务相关的内容,这两个部分彼此之间可以分开,那么这个时候我们就可以在我们的项目中创建两个不同的DbContext,然后分别注入进去,当然这两个DbContext可以共用一个ConnectionString,也可以分别使用不同的DbContext,这个需要根据不同的需要来确定,在我们建立完了不同的DbContext的时候,我们就需要分别将每一个DbContext修改的内容迁移到数据库里面去,这个就涉及到数据库Migration的问题了,所以整篇文章主要围绕如何创建多个DbContext和每个DbContext的Migration的问题。 

  下面我们通过代码来创建两个不同的DbContext

  1 创建AuthorityDbContext

public class AuthorityDbContext : abpZeroDbContext<Tenant, Role, User, AuthorityDbContext> {                 public DbSet<UserMapping> UserMappings { get; set; }         public SunlightDbContext(DbContextOptions<SunlightDbContext> options)            : base(options) {        }         protected override void OnModelCreating(ModelBuilder modelBuilder) {            base.OnModelCreating(modelBuilder);            modelBuilder.ApplyConfiguration(new TenantConfiguration());             // 请在此处填写所有与具体数据库无关的 Model 调整,确保单元测试可以覆盖             if (Database.IsInMemory())                return;                   }            }

  这个DbContext主要用来做一些和身份验证以及权限相关的操作,这里只是定义了一个最简单的结构,后面的一个DbContext就是具体业务相关的内容,在我们的项目中,我们两个DbContext会使用相同的连接字符串

  2 IDesignTimeDbContextFactory接口实现

/// <summary>   /// 用于 EF Core Migration 时创建 DbContext,数据库连接信息来自 XXX.Dcs.WEBHost 项目 appsettings.JSON   /// </summary>   public class AuthorityDesignTimeDbContextFactory : IDesignTimeDbContextFactory<AuthorityDbContext> {       private const string DefaultConnectionStringName = "Default";        public SunlightDbContext CreateDbContext(string[] args) {           var configuration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());           var connectString = configuration.GetConnectionString(DefaultConnectionStringName);            var builder = new DbContextOptionsBuilder<SunlightDbContext>();           builder.UsesqlServer(connectString);           return new SunlightDbContext(builder.Options);       }   }

  在了解这段代码之前,你可以先了解一下这个到底是做什么用的,就像注释里面说的,当我们使用EFCore Migration的时候,这里会默认读取WebHost项目里面的appsettings.json里面的Default配置的连接字符串。

{  "ConnectionStrings": {    "Default": "Server=XXXX,XX;Database=XXXX;User Id=XXXX;PassWord=XXXX;",    "DcsEntity": "Server=XXXX,XX;Database=XXXX;User Id=XXXX;Password=XXXX;"  },  "Redis": {    "Configuration": "127.0.0.1:XXXX",    "InstanceName": "XXXX-Sales"  },  "App": {    "ServerRootAddress": "Http://localhost:XXXX/",    "ClientRootAddress": "http://localhost:XXXX/",    "CorsOrigins": "http://localhost:XX,http://localhost:XX,http://localhost:XX"  },  "kafka": {    "BootstrapServers": "127.0.0.1:XX",    "MessageTimeoutMs": 5000,    "Topics": {      "CustomerAndVehicleEvent": "XXXX-customer-update",      "AddOrUpdateProductCateGoryEvent": "XXXX-add-update-product-category",      "AddOrUpdateDealerEvent": "XXXX-add-update-dealer",      "ProductUpdateEvent": "XXXX-product-update",      "VehicleInfORMationUpdateStatusEvent": "XXXX-add-update-vehicle-info",      "AddCustomerEvent": "cowin-add-customer"    }  },  "Application": {    "Name": "XXXX-sales"  },  "AppSettings": {    "ProductSyncPeriodMi": 60,    "DealerSyncPeriodMi": 60  },  "Eai": {    "Authentication": {      "Username": "2XXX2",      "Password": "XXXX"    },    "Services": {      "SapFinancial": "http://XXXX:XXXX/OSB_MNGT/Proxy/XXXX"    }  },  "DependencyServices": {    "BlobStorage": "http://XXXX-XXXX/"  },  "Authentication": {    "JwtBearer": {      "IsEnabled": true,      "Authority": "http://XXXX/",      "RequirehttpsMetadata": false    }  },  "Sentry": {    "IncludeRequestPayload": true,    "SendDefaultPii": true,    "MinimumBreadcrumbLevel": "Debug",    "MinimumEventLevel": "Warning",    "AttachStackTrace": true  },  "Logging": {    "LogLevel": {      "Default": "Warning"    }  }}

  3 DB Migration

  有了上面的工作之后,我们就能够进行数据库迁移并更新到数据库了,主要过程分为2步Add-Migration XXX和Update-Database -verbose两步,只不过是现在我们想构建多个DbContext,所以我们需要通过参数-c xxxDbContext来指定具体的DbContext ,否则会报下面的错误。More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for Powershell commands and the '--context' parameter for dotnet commands.

  有了这些以后,我们就可以更新到数据库了,在更新的时候记住要指定DbContext,更新时使用下面的命令:Update-Database -verbose -c XXXDbContext。

  4 创建第二个DbContext

  有了前面的过程,创建第二个DbContext的过程就比较简单了,重复上面的步骤一、二、三,然后完成第二个DbContext的创建和数据库的迁移,但是这里我们需要注意一些不同之处,第一个由于我们想要使用ABP框架中的多租户相关的一些实体,所以这里我们构建的基类是继承自AbpZeroDbContext,后面我们创建的业务相关的DbContext的时候,我们不需要这些,所以我们只需简单继承自AbpDbContext即可。

  5 Startup中初始化EF Core DbContext

  这个和之前创建一个DbContext有所不同的是我们需要向Asp.net core依赖注入容器中两次注入不同的DbContext,在Asp.Net Core中该如何创建DbContext并实现注入,请点击这里参考官方文档,在这里我们需要在Startup中的ConfigureServices中调用下面的代码,这个是有所不同的地方,具体我们来看看代码。 

// 初始化 EF Core DbContext            var abpConnectionString = _appConfiguration.GetConnectionString("Default");            services.ADDDbContext<SunlightDbContext>(options => {                options.UseSqlServer(abpConnectionString);                if (Environment.IsDevelopment()) {                    options.EnableSensitiveDataLogging();                    // https://docs.microsoft.com/en-us/ef/core/querying/client-eval#optional-behavior-throw-an-exception-for-client-evaluation                    options.ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));                }            });            // AuthConfigurer.MapUserIdentity 需使用 DbContextOptions<SunlightDbContext>            // Abp DI 未自动注册该对象,故而特别处理            services.AddTransient(provider => {                var builder = new DbContextOptionsBuilder<SunlightDbContext>();                builder.UseSqlServer(abpConnectionString);                return builder.Options;            });            var dcsConnectionString = _appConfiguration.GetConnectionString("DcsEntity");            services.AddDbContext<DcsDbContext>(options => {                options.UseSqlServer(dcsConnectionString);                if (Environment.IsDevelopment()) {                    options.EnableSensitiveDataLogging();                    // https://docs.microsoft.com/en-us/ef/core/querying/client-eval#optional-behavior-throw-an-exception-for-client-evaluation                    options.ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));                }            });

  这样就能够在服务具体运行的过程中来添加具体的DbContext啦,经过上面的过程我们就能够实现在一个项目中添加多个DbContext,并迁移数据库整个过程。

感谢各位的阅读!关于“asp.net Core中如何创建多DbContext并迁移到数据库”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Asp.Net Core中如何创建多DbContext并迁移到数据库

本文链接: https://lsjlt.com/news/249607.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Asp.Net Core中如何创建多DbContext并迁移到数据库
    这篇文章给大家分享的是有关Asp.Net Core中如何创建多DbContext并迁移到数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  在我们的项目中我们有时候需要在我们的项目中创建DbContext,而...
    99+
    2023-06-07
  • 如何实现oracle数据迁移到db2数据库
    这篇文章将为大家详细讲解有关如何实现oracle数据迁移到db2数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、表结构迁移在plsql中选择表----->d...
    99+
    2024-04-02
  • 如何迁移现有数据库到Amazon Aurora
    迁移现有数据库到Amazon Aurora可以通过以下步骤完成: 创建Amazon Aurora实例:首先在AWS Managem...
    99+
    2024-04-09
    Amazon
  • ASP.NET Core如何使用EF为关系数据库建模
    本文小编为大家详细介绍“ASP.NET Core如何使用EF为关系数据库建模”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.NET Core如何使用EF为关系数据库建模”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-06-29
  • 数据库SQL Azure如何迁移到本地SQL Server
    这篇文章主要介绍了数据库SQL Azure如何迁移到本地SQL Server,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2024-04-02
  • 如何在Aurora数据库中实现数据迁移
    在Aurora数据库中实现数据迁移可以通过以下几种方式: 使用AWS Database Migration Service(DMS...
    99+
    2024-04-02
  • Linux系统中如何迁移MySQL数据库
    这篇文章将为大家详细讲解有关Linux系统中如何迁移MySQL数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一步 &ndash; 执行MySQL转储在将数据库文件传输到新的VPS之前,我们...
    99+
    2023-06-27
  • 如何在 Golang 中使用数据库迁移?
    在 golang 中使用数据库迁移可确保数据库与代码同步。可以使用 ent 或 gormigrate 等库执行迁移:使用 ent:安装 ent。生成迁移文件。运行迁移。使用 gormig...
    99+
    2024-05-14
    golang 数据库迁移 git
  • 如何把本地mysql迁移到服务器数据库
    我们可以使用linux的scp命令(scp无法在windows使用),加上mysql自带的mysqldump,能很快的完成数据库的迁移 将本地的数据库(music_db)导出为sql文件(music_db.sql) ...
    99+
    2022-05-21
    mysql 迁移 服务器 数据库
  • Dreamweaver中ASP.NET如何连接到数据库
    本篇内容介绍了“Dreamweaver中ASP.NET如何连接到数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • 如何使用 Phinx 在 PHP 中迁移数据库
    构建现代 Web 应用程序通常涉及大量数据。 在开发和生产过程中管理这些数据(数据库)可能很多。 如果有多个开发人员和多个必须手动实施更改的环境,则尤其如此。 数据库迁移可帮助开发人员跨多个环境...
    99+
    2024-02-27
  • 如何在AmazonAurora中执行跨数据库迁移
    在Amazon Aurora中执行跨数据库迁移通常涉及将数据从一个数据库引擎迁移到另一个数据库引擎。以下是在Amazon Auror...
    99+
    2024-04-09
    AmazonAurora
  • laravel 中数据库迁移时报错如何解决
    这期内容当中小编将会给大家带来有关laravel 中数据库迁移时报错如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。问题描述[Illu...
    99+
    2024-04-02
  • Oracle中如何创建数据库
    在Oracle中,可以使用CREATE DATABASE语句来创建一个数据库。下面是一个创建数据库的示例:CREATE DATABA...
    99+
    2023-09-28
    Oracle
  • 阿里云服务器到期数据库:如何备份和迁移数据?
    简介 阿里云服务器是一种强大的云计算服务,但当服务器到期时,您需要考虑如何备份和迁移您的数据库。本文将介绍一些常见的备份和迁移策略,以确保您的数据安全。数据库备份在服务器到期之前,备份数据库是至关重要的。以下是一些备份数据库的方法:全量备份...
    99+
    2024-01-30
    阿里 备份 服务器
  • 数据库版本如何单独升级并将原有数据迁移过去
    本篇文章给大家分享的是有关数据库版本如何单独升级并将原有数据迁移过去,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在我们开发的应用中,一般都会...
    99+
    2024-04-02
  • 如何在数据库中创建数据表
    在数据库中创建数据表通常需要执行以下步骤: 登录到数据库管理系统,例如MySQL、Oracle、SQL Server等。 选...
    99+
    2024-04-09
    数据库
  • PostgreSQL中的数据库迁移和升级如何操作
    在 PostgreSQL 中进行数据库迁移和升级需要谨慎操作,以下是一些常用的方法: 备份数据:在进行数据库迁移和升级之前,务必...
    99+
    2024-04-09
    PostgreSQL
  • 在Oracle中如何执行数据库升级和迁移
    在Oracle数据库中,执行数据库升级和迁移通常涉及以下步骤: 创建数据库备份:在进行升级或迁移之前,首先应该创建数据库的完整备...
    99+
    2024-04-09
    Oracle
  • django如何连接mysql数据库并进行数据库的创建
    这篇文章主要介绍了django如何连接mysql数据库并进行数据库的创建的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇django如何连接mysql数据库并进行数据库的创建文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作