0

我正在编写一个实用程序来更新 .NET 6.0 中我们每个环境中的设置,使用 Blazor Wasm (这在这里真的不重要......)。

我有三个数据库,代表 3 个不同的环境(它在 3 个地方是同一个数据库)。

我配置我的上下文如下

var devConnectionString = builder.Configuration.GetConnectionString("DevelopmentServer");
var qaConnectionString = builder.Configuration.GetConnectionString("QAServer");
var prodConnectionString = builder.Configuration.GetConnectionString("ProdServer");
builder.Services.AddDbContext<DockDevContext>(options => options.UseSqlServer(devConnectionString));
builder.Services.AddDbContext<DockQaContext>(options => options.UseSqlServer(qaConnectionString));
builder.Services.AddDbContext<DockProdContext>(options => options.UseSqlServer(prodConnectionString));

我的服务看起来像:

public PricingRepository(
    DockDevContext dockDevContext,
    DockQaContext dockQaContext,
    DockProdContext dockProdContext,
    IOptions<CosmosOptions> options)
{
    _dockDevContext = dockDevContext;
    _dockQaContext = dockQaContext;
    _dockProdContext = dockProdContext;
    _options = options.Value;
}

忽略宇宙选项...

我的数据库上下文都看起来像:

public class DockDevContext : BaseContext
{
    public DockDevContext(DbContextOptions<DockDevContext> options)
        : base(options)
    {
    }
}

并且所有 3 都继承自 basecontext:

public class BaseContext : DbContext
{
    public DbSet<UserMapping>? UserMappings { get; set; }
    public BaseContext(DbContextOptions options ):base(options)
    {
    }
}

我的更新例程如下所示:

private void AddCustomerNumberMapping<TContext>(
    TContext context,
    MsaPricing msaPricing, 
    bool isProd = false) 
    where TContext : BaseContext
{
    var mapping = new UserMapping
    {
        UserId = isProd ? ProdUserId : NonProdUserId,
        CustomerNumber = long.Parse(msaPricing.CustomerNumber)
    };

    var existingMapping = context.UserMappings? 
        .Where(map => mapping.UserId == map.UserId &&
            mapping.CustomerNumber == map.CustomerNumber);

    context.UserMappings?.Add(mapping);
    context.SaveChanges();
}

当我第一次使用 contextA 运行它时,它可以工作当我使用上下文 B 运行它时,它失败了,说它已被处理。

4

0 回答 0