连接字符串传递给存储库构造函数时,DBContext构造函数的字段初始化程序错误

时间:2016-03-12 15:37:17

标签: c# entity-framework constructor dbcontext

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

2 个答案:

答案 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();
    }
}