c# - 如何通过选项配置设置自定义私有(private)DbContext包中的Azure默认TenantId

标签 c# asp.net azure visual-studio entity-framework-core

我正在使用公司的自定义 DbContext 作为私有(private)包。 包实现如下所示:

namespace Company.Data.CompanyServices

    {
        public class CompanyServicesDbContext : DbContext
        {
            public virtual DbSet<Account> Accounts { get; set; }
    
            public virtual DbSet<Administration> Administrations { get; set; }
    
            public virtual DbSet<MfaStatus> MfaStatuses { get; set; }
             .....
             public CompanyServicesDbContext (DbContextOptions options)
                : base(options)
            {
            }
            .......
        }
    }

我想设置默认的 Azure tenantId 来获取 token 并操作数据库。

问题是我有不同的 Azure 租户,如果我没有登录到正确的租户,当我使用 Visual Studio 在本地运行应用程序时,我的应用程序会失败。

我知道这是因为我的应用程序从其他租户那里获取了错误的 token ,所以我登录了。

如果我创建应用程序 dbContext,我可以通过以下实现来实现这一点:

     public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
            {
                var tokenRequestContext = new TokenRequestContext(new[] { "https://database.windows.net/" }, null, null,
                tenantId = "xxxx-xxxx-xxxx-xxxx" //👈 passing the default tenantId here
                );
                var accessToken = (new DefaultAzureCredential()).GetToken(tokenRequestContext);
                var conn = (Microsoft.Data.SqlClient.SqlConnection)this.Database.GetDbConnection();
                conn.AccessToken = accessToken.Token;
    
            }

但是我使用的是私有(private) DbContext 包,并且我无法更改包代码。

当我使用私有(private)包并使用其中的实现时,有没有办法通过配置选项传递 token ?

最佳答案

由于这是一个内部包,包维护者应该为您提供:

  • 可以选择使用简洁的助手自行注册扩展程序 方法并允许您传递tenantId
  • 允许/公开某种 appSetting 部分供您添加到配置中,这样您只需添加一个配置值,然后包应该在内部查找该部分(就像获取连接字符串一样)您不知道它是如何使用的,但您确实需要记住将配置添加到您的应用程序配置文件中

关于c# - 如何通过选项配置设置自定义私有(private)DbContext包中的Azure默认TenantId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75674358/

相关文章:

c# string[] 与 IEnumerable<string>

c# - 虚拟目录的绝对路径引用问题

c# - Azure Blob 容器 - 上传具有相同名称属性的 Blob

c# - 使用 Azure 应用服务中的 Powershell 命令连接到 Azure AD

c# - 我可以在Visual Studio中为单元测试/负载测试创建自定义TestContext计时器吗?

c# - 将数据发布到 asp.net Web API

使用正确凭据的 C# WebClient HTTP 基本身份验证失败 401

asp.net - Moq Parent 没有默认构造函数。默认构造函数必须显式定义

node.js - Express JS 到 Azure 函数 API 迁移

azure - Azure AD 将组声明应用于 ClaimsPrincipal 的顺序可靠吗?