我正在构建一个多租户的应用程序。代码是共享的,但每个客户端都有不同的数据库。我有代码确定特定客户端的数据库连接字符串(基于他们正在使用的API密钥)。
我想使用此连接字符串初始化上下文。
我通过将字符串传递给存储库构造函数来解决这个问题,希望我可以将它重用于上下文构造函数但是我收到了错误:
A field initializer cannot reference the non-static field, method, or property...
当我尝试使用我之前传递到Repository构造函数的连接字符串初始化Entity Framework数据库上下文时。
我已经研究并理解了错误(您无法使用其他实例成员初始化一个实例成员,因为当时可能无法使用它)但我不确定如何解决它。
我想要实现的目标在代码中是不言而喻的:
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();
}
}
答案 0 :(得分:2)
您正在尝试初始化字段dbContext
public IntrinsicDbContext dbContext = new IntrinsicDbContext(_dbConnectionString);
在为_dbConnectionString
提供值之前。
您可以将初始化移动到构造函数中。
答案 1 :(得分:0)
当_dbConnectingString有值时,您可以在构造函数中初始化dbContext:
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();
}
}