Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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
C# 多数据库连接字符串:在我的应用程序中存储它的位置_C#_Asp.net Mvc_Session_Multi Tenant_Multi Database - Fatal编程技术网

C# 多数据库连接字符串:在我的应用程序中存储它的位置

C# 多数据库连接字符串:在我的应用程序中存储它的位置,c#,asp.net-mvc,session,multi-tenant,multi-database,C#,Asp.net Mvc,Session,Multi Tenant,Multi Database,我有相同模式的不同数据库。我需要根据已连接的客户端连接到其中一个。 例如,如果ClientA已连接,则我必须连接到数据库a;如果ClientB已连接,我必须连接到DatabaseB; 现在我有了一个多层应用程序:表示层、服务层和存储库层。 通过一些逻辑,我获得了正确的连接字符串 所以。。我现在需要的 我不知道在哪里存储该客户端的连接字符串!我在会议上思考。但如果我将其存储在会话中,我必须在每次调用存储库层时将其传递给存储库层,因为会话在存储库中不可见。 我认为这是我能采取的最糟糕的解决办法 我希

我有相同模式的不同数据库。我需要根据已连接的客户端连接到其中一个。 例如,如果ClientA已连接,则我必须连接到数据库a;如果ClientB已连接,我必须连接到DatabaseB; 现在我有了一个多层应用程序:表示层、服务层和存储库层。 通过一些逻辑,我获得了正确的连接字符串

所以。。我现在需要的

我不知道在哪里存储该客户端的连接字符串!我在会议上思考。但如果我将其存储在会话中,我必须在每次调用存储库层时将其传递给存储库层,因为会话在存储库中不可见。 我认为这是我能采取的最糟糕的解决办法

我希望选定的连接字符串只是该客户端的全局变量中的存储库层

建议?
谢谢

可能最好的方法是使用一个数据库,其中与用户相关的表具有用户表的外键


您可以从Microsoft文章中了解有关多租户体系结构的更多信息。关于这个主题,这里有一个完整的主题:

为什么不在应用程序中创建ConnectionString存储库,并根据逻辑获得正确的CS。类似于查找表的东西,静态的。
如果您想修改连接字符串,您可以使用app.config随时从那里获取它们

如果您想保留网站的全局数据-您可以在应用程序类中存储任何数据,您可以通过以下链接查看更多详细信息:
如果您有应用程序的任何单独部分,您可以将共享数据保存在xml文件中,并在每个应用程序域中创建ConfigManager,或者您可以使用数据库表。

已经完成了很多讨论,我想根据我的经验分享我的想法

始终建议在存储库层为连接到的客户端解析连接字符串。但是,这可以缓存在应用程序中

您将拥有包含驻留在应用程序中的所有业务实体的业务层,并且可以在应用程序的所有层中访问它


如果连接字符串解析机制位于该层[当然是缓存的],它将是一个优雅的设计,易于使用。

是的,我读了那篇文章,对于我的情况,最好是有不同的数据库…我创建了一个包含所有连接字符串的存储库。存储库位于公共数据库中,每次客户端连接到应用程序时,我都会读取有关该客户端的所有信息。但我不知道该把这些信息存储在哪里。例如连接字符串。可能使用singleton?我应该在会话开始时实例化我的DbContext一次。。。嗯。。。我不知道。。我想..或者dbContext/客户端,或者存储在单例中的查找表,任何选项都是可行的解决方案k。。我有一个查找表,但如何访问正确的行?以Id为例。。我把这个身份证带到哪里?我必须在每个调用数据库的方法上传递这个id?这样我就可以读正确的一行了。。这是我试图避免的。。。传递一个对我的业务组件不是严格必需的值,只是因为我需要了解我必须在哪个数据库中操作…嗯。。在应用程序类中,我将应用程序中每个人的公共属性。。。每个客户的我的价值变化。。。我想最好是像这样宣称。。。。但是每次请求都会丢失索赔……嗯。。您可以使用会话数据或cookie数据作为参数,为每个请求创建与请求相关的存储库,该存储库将从IoC容器中创建。如果我误解了您的问题,请纠正我。它与请求无关,但与客户端(或租户)相关。。我想避免会话,但到目前为止,它似乎是唯一的解决方案……那么,为什么不使用数据库方法呢?哦,对不起,但我的意思是: