问题:我有一组具有相同数据结构的数据库和表。我有一个服务器列表、目录和登录信息。我想遍历服务器列表,并设置 dbcontext 连接字符串,这样我就可以从每个实例中完全相同的表中读取数据,并返回配置信息列表。我遵循使用 CQRS 的 SOLID Principle Design,这是一个运行良好的 .Net 7 解决方案。只是想知道,是否可以在存储库级别设置连接字符串,当数据访问发生时,而不必注册每个实例,或将其保存在应用程序设置中。我可以传递连接字符串,但需要在 dbcontext 中设置它。感谢您的帮助。
示例 DbContext 类:
namespace DemoApp.Persistence.DomainDbContext;
public partial class DemoDbContext : DbContext
{
public DemoDbContext(DbContextOptions<DemoDbContext> options)
: base(options)
{
}
public virtual DbSet<ConfigSystem> ConfigSystems { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ConfigSystem>(entity =>
{
entity.HasKey(e => e.ConfigSystemGuid);
entity.ToTable("ConfigSystem", "dbo", tb => tb.HasTrigger("Tr_ConfigSystem_Update"));
entity.HasIndex(e => e.ConfigSystemName, "UX_ConfigSystem").IsUnique();
entity.Property(e => e.ConfigSystemGuid)
.HasDefaultValueSql("(newsequentialid())")
.HasColumnName("ConfigSystemGUID");
entity.Property(e => e.EnvironmentId)
.HasMaxLength(250)
.IsUnicode(false)
.HasColumnName("EnvironmentID");
entity.Property(e => e.EnvironmentType)
.HasMaxLength(50)
.IsUnicode(false);
entity.Property(e => e.Version)
.HasMaxLength(25)
.IsUnicode(false)
.HasDefaultValueSql("((1))");
entity.Property(e => e.VersionDate)
.HasDefaultValueSql("(getdate())")
.HasColumnType("smalldatetime");
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
**Sample Repository class:**
namespace DemoApp.Persistence.Repositories
{
public class ConfigSystemRepository : DemoAppBaseRepository<ConfigSystem>, IConfigSystemRepository
{
public ConfigSystemRepository(DemoAppDbContext dbContext) : base(dbContext)
{
//How to rest the connection string on the dbcontext to point to the right server/database
}
private readonly string DemoConnectionString = Persistence.PersistenceServiceRegistration.ConntectionSting;
public string GetDemoAppCn()
{
return DemoConnectionString ;
}
public async Task<List<ConfigSystem>> GetConfigSystemList()
{
return await _dbContext.ConfigSystems.Take(10).ToListAsync();
}
public async Task<ConfigSystem> GetConfigSystemItem()
{
return await _dbContext.ConfigSystems.FirstOrDefaultAsync();
}
}
}