我已经为特定网站构建了自定义.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看起来都一样,只是数据库连接会有所不同。
任何帮助都将非常有用,如果您需要更多信息,请告诉我。
谢谢
DbContexts看起来都一样,只是数据库连接会有所不同
这使事情变得很简单。您已经在存储库中注入了DbContext
,如下所示:
public ProductRepository(AppDbContext context) : base(context) { }
您需要知道[[以某种方式使用哪个数据库;可能来自某些外部运行时输入。基于此,您应该构建连接字符串。这样,您就可以创建所需的DbContext
实例并将其注入存储库中。
客户端将在请求中发送类似DbName:xxxx的内容,以便此后端知道要使用的数据库
看起来很棒。那应该工作。您可以基于此构建连接字符串。可能是ConnectionStringFactory
类或类似的类。
类似地,可以考虑用于创建所需上下文的DbContextFactory
。