使用存储库模式的多个数据库

问题描述 投票:-1回答:1

我已经为特定网站构建了自定义.net核心cms后端,现在我也想将相同的cms后端也用于另一个网站。这意味着我需要添加一个不同的数据库,然后客户端将发送一些消息以告诉后端要使用哪个数据库。

我需要一个新的DbContext吗?例如说App2DbContext。

我正在使用存储库模式和工作单元,发现很难弄清楚从何处开始执行此操作。

存储库看起来像这样:

public ProductRepository(AppDbContext context)
    : base(context) { }

public async Task<Product> Get(string route)
{
    return await AppDbContext.Products
        .Include(p => p.Seo)
        .FirstOrDefaultAsync(p => p.Route == route);
}

public void Update(Product product)
{
    Context.Set<Product>().Attach(product);
    Context.Entry(product).State = EntityState.Modified;
    Context.Entry(product.Seo).State = EntityState.Modified;
}

public AppDbContext AppDbContext => Context as AppDbContext;

我的startup.cs拥有此:

services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()));
services.AddDbContext<AppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("AppConnection")));

我认为id需要添加新的DbContext和数据库连接,然后客户端将在请求中发送类似DbName:xxxx的内容,以便此后端知道要使用的数据库。

仅供参考,两个DbContext看起来都一样,只是数据库连接会有所不同。

任何帮助都将非常有用,如果您需要更多信息,请告诉我。

谢谢

asp.net-core repository-pattern multiple-databases
1个回答
0
投票

DbContexts看起来都一样,只是数据库连接会有所不同

这使事情变得很简单。您已经在存储库中注入了DbContext,如下所示:

public ProductRepository(AppDbContext context)
    : base(context) { }

您需要知道[[以某种方式使用哪个数据库;可能来自某些外部运行时输入。基于此,您应该构建连接字符串。这样,您就可以创建所需的DbContext实例并将其注入存储库中。

关于上面我说的“一些外部运行时输入”,在这里讨论太广泛了。您的假设:

客户端将在请求中发送类似DbName:xxxx的内容,以便此后端知道要使用的数据库

看起来很棒。那应该工作。您可以基于此构建连接字符串。可能是ConnectionStringFactory类或类似的类。

类似地,可以考虑用于创建所需上下文的DbContextFactory

© www.soinside.com 2019 - 2024. All rights reserved.