我正在构建一个多租户应用程序。代码是共享的,但每个客户端都有不同的数据库。我有代码可以确定特定客户端的数据库连接字符串(基于他们使用的 API 密钥)。
我想使用此连接字符串初始化上下文。
我通过将字符串传递给存储库构造函数来解决这个问题,希望我可以将其重用于上下文构造函数,但我收到错误:
A field initializer cannot reference the non-static field, method, or property...
当我尝试使用以前传递到存储库构造函数的连接字符串初始化实体框架数据库上下文时。
我已经研究并理解了该错误(您无法使用另一个实例成员初始化一个实例成员,因为它当时可能不可用),但我不确定如何解决它。
我试图实现的目标从代码中是不言而喻的:
public class GlobalCompanyRepository : IGlobalCompanyRepository
{
private readonly string _dbConnectionString;
public GlobalCompanyRepository(string dbConnectionString)
{
_dbConnectionString = dbConnectionString;
}
public IntrinsicDbContext dbContext = new IntrinsicDbContext(_dbConnectionString);
public void Add(GlobalCompany entity)
{
dbContext.GlobalCompanies.Add(entity);
dbContext.SaveChanges();
}
}
您正在尝试初始化字段 dbContext
public IntrinsicDbContext dbContext = new IntrinsicDbContext(_dbConnectionString);
在给_dbConnectionString
一个值之前。
可以将初始化移动到构造函数中。
当 dbContext 具有值时,可以在构造函数中初始化 dbContext_dbConnectingString:
public class GlobalCompanyRepository : IGlobalCompanyRepository
{
private readonly string _dbConnectionString;
public GlobalCompanyRepository(string dbConnectionString)
{
_dbConnectionString = dbConnectionString;
dbContext = new IntrinsicDbContext(_dbConnectionString);
}
public IntrinsicDbContext dbContext;
public void Add(GlobalCompany entity)
{
dbContext.GlobalCompanies.Add(entity);
dbContext.SaveChanges();
}
}