我有一个带有 SQL 服务器后端的 asp.net-MVC 网站。有 100 个不同的表,该站点适用于 300 人的组织。
我们现在想将它用于另一个组织,然后是如何扩展站点的技术问题。以下是一些要求:
背景:
有许多表可以在两个组织之间完全重用,但也有许多表我必须添加过滤器以确保我只获取与该特定组织相关的记录。
鉴于此,我有 像这个问题或Joel 的播客上所讨论的那样做出单一或多数据库决定 (如果可能,我试图将它保存到单一数据库,因为有用户想要查看两个组织)所以我排序在多租户数据库决策中必须使用共享
正如播客中所讨论的,作为示例,有一个People表。这很简单,因为如果我只是在查询people表,它只是在查询中添加一个“ where Person.Org = “A” 。但它也会影响与People表有直接或间接连接的任何查询。所以让我们说我有一个Car表,并且有一个Owner列(这将是People表的外键),如果我有一个 Cars 下拉列表,我首先必须加入People,然后添加该过滤器(在它只是Select *来自汽车)。我正在使用 nhibernate,但你明白了
问题:
我现在的重点是我正在尝试确定如何围绕我的所有 asp.net-mvc 控制器操作进行额外的切换以支持这个新组织。因此,如果我有 40 个控制器并且每个控制器有 10 个操作,我必须更新 400 个操作和每个页面(以及所有视图和 JavaScript 代码以指向某些 URL。我需要首先确定我是哪种“模式”在确定我是否应该查询 org 1 或 org 2
我不想遍历每一个控制器操作并添加一个新参数或“组织名称”或类似的路由,所以我想看看是否有任何想法。即使它运行两个不同的网站,如果我想在单个代码库中运行它,我仍然必须有这个全局开关。
有没有建议可以避免在每个控制器操作上添加额外的参数?