当连接字符串已传递给存储库构造函数时,DBContext 构造函数的字段初始值设定项错误

Field initializer error with DBContext constructor when connection string has been passed to the repository constructor

我正在构建一个多租户应用程序。代码是共享的,但每个客户端都有不同的数据库。我有确定特定客户端的数据库连接字符串的代码(基于他们正在使用的 API 键)。

我想使用此连接字符串初始化上下文。

我通过将字符串传递给存储库构造函数来解决这个问题,希望我可以将它重新用于上下文构造函数,但我收到了错误:

A field initializer cannot reference the non-static field, method, or property...

当我尝试使用我之前传递给存储库构造函数的连接字符串来初始化 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();
    }
}

您正在尝试初始化您的字段 dbContext

public IntrinsicDbContext dbContext = new   IntrinsicDbContext(_dbConnectionString);

之前_dbConnectionString已经被赋值。

您可以将初始化移动到构造函数中。

当_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();
    }
}