我正在使用公司的自定义 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/