使用相同的模式访问多个数据库

时间:2014-02-19 21:21:55

标签: .net sql-server wcf entity-framework multi-tenant

我必须实现一个系统,其中有几个(没有固定限制)数据库或具有相同表格结构的模式,用于multitenancy系统。

对于每个请求,都提供某种数据库/模式ID(如租户ID)。 我想要做的是根据该ID选择数据库或模式,并告诉我的实体框架模型(代码优先)以该特定数据库/模式为目标。 然后,系统(WCF服务)将执行一些查询并等待下一次调用,目标(可能)是另一个数据库/模式。 当然,可以在不同的线程中同时执行多个请求,使用实体对象访问不同的数据库/模式。

我正在使用SQL Server,租户数量可能在5到50之间。

有没有办法实现这个目标?

顺便问一下,SQL Server在架构和数据库之间有区别吗?我知道有oracle,但我对SQL Server很新,并且还没有完全理解所有的微软术语。

很多问候! 沃尔克

2 个答案:

答案 0 :(得分:0)

是的,这完全有可能。

DbContext,您的上下文将从中继承,它有一个构造函数,它接收ConnectionString名称(在您的web.config中声明)或实际的ConnectionString。因此,您可以使用相同的Context类型动态构建connectionString并连接到不同的数据库。

但是,考虑到您将创建一个Context实例,您不会同时为多个数据库使用相同的Context实例。

现在,在您的方案中,您必须考虑如何将某些特定ID解析为实际数据库名称。您可以通过拥有一个额外的数据库来实现这一目标,例如将保存该信息的主数据库。

注意:如果您要使用EF迁移,请务必小心。务必将迁移应用到正确的数据库中。

答案 1 :(得分:0)

使用DbContext的OnModelCreatining事件,您可以设置默认架构。

看看https://docs.microsoft.com/en-us/ef/core/modeling/relational/default-schema

结合自定义的ConnectionString构建器,您可以完成任务。