【发布时间】:2021-06-09 14:37:56
【问题描述】:
我有一个 .NET 5 Azure Function 运行,FUNCTIONS_WORKER_RUNTIME 配置值为 dotnet-isolated。
函数应用需要使用 EF Core 5.0.6 连接到 Azure SQL 数据库。
我遵循this post 的指导进行 EF 配置。
我的自定义 dbcontext 现在是:
public class SmsOrderContext : DbContext
{
private readonly AzureServiceTokenProvider azureServiceTokenProvider;
public SmsOrderContext(DbContextOptions<SmsOrderContext> options, AzureServiceTokenProvider azureServiceTokenProvider) : base(options)
{
RelationalDatabaseCreator databaseCreator =
(RelationalDatabaseCreator)this.Database.GetService<IDatabaseCreator>();
databaseCreator.EnsureCreated();
this.azureServiceTokenProvider = azureServiceTokenProvider;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
SqlConnection connection = new SqlConnection();
string? envConString = Environment.GetEnvironmentVariable(ConfigConstants.SqlSvrConnString);
connection.ConnectionString = envConString ?? "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=SmsRouter";
if (azureServiceTokenProvider != null)
connection.AccessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://database.windows.net/").Result;
optionsBuilder.UseSqlServer(connection);
}
}
检查SqlSvrConnString 环境变量的条件在那里,以便我可以在本地运行应用程序 - 它使用 localdb(这工作正常)而不是 Azure
在 program.main 我有:
.ConfigureServices(s =>
{
s.AddSingleton<AzureServiceTokenProvider>(new AzureServiceTokenProvider());
s.AddDbContext<SmsOrderContext>();
}
在我的函数应用上,Identity\System 分配的“状态”切换设置为“开启”
当我触发 Azure 函数(来自 http 请求)时,我在 Application Insights 中看到以下异常:
失败异常:Microsoft.Data.SqlClient.SqlException (0x80131904):
用户“”登录失败
我认为这表明身份没有被传递给 Sql Server?谁能看看我哪里出错了?
【问题讨论】:
-
您想知道如何将 Azure SQL 与服务主体连接起来吗?
-
使用函数应用的托管标识连接是
-
您是否在数据库中配置了 Azure AD:docs.microsoft.com/en-us/azure/azure-sql/database/…?
-
我觉得需要一个新问题...stackoverflow.com/questions/67924268/…
标签: entity-framework-core azure-functions azure-web-app-service