c# - 如何在不进行大量重写的情况下在现有的 asp.net-mvc 站点上添加新路由?

标签 c# sql-server asp.net-mvc nhibernate refactoring

我有一个带有 SQL 服务器后端的 asp.net-MVC 网站。有 100 张不同的 table ,这个网站适用于 300 人的组织。

我们现在想将它用于另一个组织,然后出现了如何扩展站点的技术问题。以下是一些要求:

背景:

有很多表可以在两个组织中完全重用但是还有很多表我必须添加一个过滤器以确保我只取回与该特定组织相关的记录.

鉴于此,我有 Single or Multiple Database decision to make like this questiondiscussed on Joel's podcast (如果可能的话,我试图将它保存在一个数据库中,因为有些用户想要查看两个组织)所以我有点不得不使用 shared in the multi tenant database decision

正如播客中所讨论的,例如有一个People 表。这很简单,如果我只是查询 people 表,它只是在查询中添加一个“where Person.Org = "A"。但它也会影响任何查询与People 表有直接或间接连接。假设我有一个Car 表并且它有一个Owner 列(这将是People 表中的外键),如果我有一个 Cars 下拉列表,我首先必须加入 People 然后添加该过滤器(之前只是 从 Cars 中选择 *)。我正在使用 nhibernate,但你明白了这一点

问题:

我现在的重点是我正在尝试确定如何围绕我的所有 asp.net-mvc Controller 操作进行额外切换以支持这个新组织。所以如果我有 40 个 Controller 并且每个 Controller 有 10 个 Action ,我必须更新 400 个 Action 和每个页面(以及所有 View 和 javascript 代码以指向某些 URL。我需要首先确定我是哪种“模式” in 以确定我是否应该查询 org 1 或 org 2

我不想遍历每个 Controller 操作并添加一个新参数或一个“组织名称”或类似的路由,所以我想看看是否有任何想法。即使它运行两个不同的网站,如果我想让它在一个代码库中运行,我仍然必须有这个全局开关。

有什么建议可以避免在每个 Controller 操作上添加额外的参数吗?

最佳答案

假设您有一组有限的表(至少, Controller 操作的表更少)并且您的 CRUD 操作是集中的,您可以在用户登录时在 session 中设置 orgId 并使用该值进行过滤所有查询?

关于c# - 如何在不进行大量重写的情况下在现有的 asp.net-mvc 站点上添加新路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305439/

相关文章:

c# - [类名] 类型声明中缺少部分修饰符;存在此类型的另一个部分声明

c# - 无法加载文件或程序集 'XXX' 或其依赖项之一。该系统找不到指定的文件

asp.net-mvc - 用于 ninject 的 ASP.NET MVC 3 Preview 配置

c# - 如何更改 TagHelpers 中 ModelExpression 的类类型?

C#:下载超时的 URL

c# - 如何阻止用户打开 Internet Explorer 或 Firefox 等新进程?

java - 是否可以在 sql server 上使用 jdbc 获取查询计划?

c# - 错误代码 : procedure has too many arguments specified

c# - 尝试保存图像时出现一般 GDI+ 错误(在 64 位 Windows 7 上)

asp.net-mvc - 为什么我的 bootstrap header 覆盖了其他内容?