Как добавить несколько контекстов данных с помощью UseSqlServer в start.cs - PullRequest
0 голосов
/ 05 августа 2020

Ситуация: у меня есть две разные sql базы данных для извлечения данных. Когда я проверяю соединение из двух репозиториев, они одинаковы, даже если они были инициализированы разными строками подключения. Startup.cs

  public class Startup
  {
    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        _config = configuration;
        _env = env;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        string connectionString1= _config.GetConnectionString("A_DbCoreConnectionString");
        services.AddDbContext<AContext>(options1 => options1.UseSqlServer(connectionString1)) ;
        string connectionString2= _config.GetConnectionString("B_DbCoreConnectionString");
        services.AddDbContext<BContext>(options1 => options1.UseSqlServer(connectionString2)) ;
    }

}

Controller.cs

  public MyController(IUserService userService,IARepository aRepository, IBRepository bRepository)
    {

        _userService = userService;

        _aRepository = aRepository;
        
        _bRepository = bRepository;
     }
        
    }

A и B repository.cs

 public class ARepository :IARepository
 {
    public AContext _dbContext; 
    public ARepository(AContext dbContext) 
    {
    _dbContext = dbContext;

    var connection=_dbContext.Database.GetDbConnection(); 
    }
  ...
 }

 public class BRepository :IBRepository
 {
    public BContext _dbContext; 
    public BRepository(BContext dbContext) 
    {
    _dbContext = dbContext;
      var connection=_dbContext.Database.GetDbConnection();
    }
    ...
 }

1 Ответ

0 голосов
/ 06 августа 2020

https://code-maze.com/net-core-web-development-part4/ Маринко Спасоеви c сказал, что этот код сработал для него, что в точности соответствует шаблону кода, которому я следовал.

public class ProductContext : DbContext 
{
public ProductContext(DbContextOptions<ProductContext> options)
: base(options)
{
}

public DbSet<Employee> Employees { get; set; }
}

public class RepositoryContext : DbContext
{
public RepositoryContext(DbContextOptions<RepositoryContext> options)
: base(options)
{
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
 modelBuilder.ApplyConfiguration(new CompanyConfiguration());
 modelBuilder.ApplyConfiguration(new EmployeeConfiguration());
}

public DbSet<Company> Companies { get; set; }
public DbSet<Employee> Employees { get; set; }
}

настройки приложения. json:

"ConnectionStrings": {
"sqlConnection": "server=.; database=CompanyEmployee; Integrated Security=true",
"prodConnection": "server=.; database=ProdDb; Integrated Security=true"
},

Startup.cs:

services.AddDbContext<RepositoryContext>(opts =>
opts.UseSqlServer(configuration.GetConnectionString("sqlConnection"), b => 
b.MigrationsAssembly("CompanyEmployees")));

services.AddDbContext<ProductContext>(opts =>
opts.UseSqlServer(configuration.GetConnectionString("prodConnection"), b => 
b.MigrationsAssembly("CompanyEmployees")));

RepositoryManager (просто класс-оболочка для всех моих пользовательских классов репо, предоставляемых с помощью классов Context):

private RepositoryContext _repositoryContext;
private ProductContext _prodContext;

public RepositoryManager(RepositoryContext repositoryContext, ProductContext 
prodContext)
{
_repositoryContext = repositoryContext;
_prodContext = prodContext;
var conn = _repositoryContext.Database.GetDbConnection();
var prodConn = _prodContext.Database.GetDbConnection();
}
...