【发布时间】:2021-04-20 06:50:02
【问题描述】:
我有以下文件夹结构
以下所有内容都在一个解决方案中:-
- API 项目(所有 API 相关的 Controller、Helper、Extension Methods)
- BLL 类库项目(适用于所有业务层逻辑)
- DAL 类库项目(这里有 EF Core Db 上下文类)。
- 模型类库(API 中使用的所有模型、EF 核心都添加到该库中)
- Function App Project(调用数据库进行检查的地方)
问题:- (1) 中有一个 API,它调用 Function App(5)。因此,为了进行 Db 检查和验证,我正在启动 Dbcontext()。
using (var _dbcontext = new sampleDbcontext())
{
//Code to validate some Db check
}
sampleDbcontext 在 EFcore Dbcontext 类所在的 DAL 类库 (3) 中。所以默认有一个项目引用从 DAL 项目添加到函数应用项目。在 Dbcontext 类中,我有以下代码
public class sampleDbcontext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(Environment.GetEnvironmentVariable("DefaultConnection", EnvironmentVariableTarget.Process));
}
}
}
这个DefaultConnection 在 API 项目 (1) 中。即在appsettings.json 文件中。
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Initial Catalog=sampleDb; Integrated Security=true;"
}
}
函数每次执行时都会抛出错误Value cannot be null. (Parameter 'connectionString')。我真的不知道我错过了什么。
我已经从函数 App(5) 中添加了对 APi 项目(1) 的引用,仍然没有结果。参考树如下
- API 项目 --BLL(2) & 模型类库(4)
- BLL 类库 --DAL(3) & 模型类库(4)
- DAL 类库 -- 模型类库(4)
- 功能应用项目 --BLL类库(二)
起始项目是 API 项目 (1)。可能的问题在哪里?
【问题讨论】:
-
也许我错了,但 appsettings.json 中的设置不能作为环境变量使用。同样在您的 appsettings.json 中,您具有结构 ConnectionStrings - DefaultConnection,但在您的代码中,您尝试获取 DefaultConnection。所以这似乎是错误。
-
你的意思是 optionsBuilder.UseSqlServer(Environment.GetEnvironmentVariable("ConnectionStrings:DefaultConnection", EnvironmentVariableTarget.Process));
-
但这对于其余所有 API 都按预期工作,其中没有 Function App 调用。这仅对调用函数应用程序的 API 失败。在 Dbcontext 中,我没有使用 IConfiguration ,因为它会让我需要额外的 DI。所以我正在使用 Environment.GetEnvironmentVariable("DefaultConnection", EnvironmentVariableTarget.Process)
-
是的,如果您将
Environment.GetEnvironmentVariable(...)的结果放入它自己的变量中,在您调用options.UseSqlServer()并在那里设置断点之前,您可以检查它是否包含所需的值。
标签: c# asp.net-core-webapi asp.net-core-3.1 azure-function-app