Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用相同的模式访问多个数据库_.net_Sql Server_Wcf_Entity Framework_Multi Tenant - Fatal编程技术网

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

.net 使用相同的模式访问多个数据库,.net,sql-server,wcf,entity-framework,multi-tenant,.net,Sql Server,Wcf,Entity Framework,Multi Tenant,我必须实现一个系统,在这个系统中,有几个没有固定限制的数据库或模式,它们具有相同的表结构 对于每个请求,都会提供某种数据库/模式ID,如租户ID。 我想做的是基于该ID选择数据库或模式,并首先告诉我的实体框架模型代码以该特定数据库/模式为目标。 然后,系统(一个WCF服务)将执行一些查询并等待下一个调用,目标可能是另一个数据库/模式。 当然,可以在不同的线程中同时执行多个请求,使用实体对象访问不同的数据库/模式 我使用的是SQL Server,租户的数量可能在5到50之间 有没有办法做到这一点

我必须实现一个系统,在这个系统中,有几个没有固定限制的数据库或模式,它们具有相同的表结构

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

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

有没有办法做到这一点

顺便问一下,模式和数据库在SQLServer中有什么不同吗?我知道oracle也有,但我对SQL Server还很陌生,还不完全理解所有的microsoft术语

祝你好运!
沃尔克是的,这是完全可能的

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

但是,考虑到创建上下文实例,对于同一个数据库,不能同时使用同一个上下文实例。

现在,在您的场景中,您必须考虑如何将某些特定id解析为实际的数据库名称。您可以通过拥有一个额外的数据库来实现这一点,比如一个主数据库来保存这些信息


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

使用DbContext的onModelCreating事件,可以设置默认架构

看看


结合自定义连接字符串生成器,您可以完成任务。

SQL Server数据库可以有多个架构。模式提供单个数据库中对象的逻辑分组,通常是为了安全/角色。在谈论数据库模式的同时谈论模式往往会让人困惑。。