我们目前正在开发代号为 FinAcuity 的 SAAS 应用程序,该应用程序将托管在 Windows Azure 平台上,主要数据库将是 SQL Azure。
以下是我们产品的一些技术规范:
- 开发环境 - Asp.Net 4.0 与 MVC 3 (Razor)、 Entity Framework
- 数据库 - SQL Azure
这是我们的业务案例:
- 我们的产品是SAAS产品,由于它将包含客户的财务数据,因此我们将为每个客户提供单独的数据库,以实现更高水平的 Multi-Tenancy 、数据隔离和安全性。
- 现在,客户可以在其帐户下创建多个公司,这些公司将通过特定客户数据库下的架构进行分隔。
注意:每个架构的表结构都相同。
以下是一些场景,可以让您更深入地了解我们的申请流程。
场景 1:
- 为了在客户端注册时配置新数据库,我们将运行存储过程来创建具有基本结构的数据库。
- 我们的疑问:这是在 SQL Azure 上执行此操作的正确方法还是有其他方法?
场景 2:
- 为了访问客户端数据库下的多个架构,我们为各个架构动态生成了 SSDL 文件,并使用该文件进行连接。
- 我们的疑问:是否有其他方法可以做到这一点,例如使用相同的 SSDL 文件实例进行多个连接并传递元数据进行连接?
场景 3:
- 由于我们的应用程序支持从 Excel 文件进行即席查询和动态表创建,因此我们将提供向导,该向导将在后端运行存储过程,并在特定架构下从向导选择 header 时从 Excel 文件动态创建该表用于客户数据库。
- 我们的疑问:请向我们建议更好的方法(如果有)?
场景 4:
- 现在,当新表添加到架构中时,我们必须更新 EDMX 文件以从新创建的表中获取数据。为此,我们将运行存储过程,从新创建的表中获取数据。
- 我们的疑问:是否有任何方法可以更新 EDMX 文件运行时并获取数据?
需要针对上面列出的每种情况提供最佳解决方案的建议。
提前谢谢您。
最诚挚的问候 - 萨希尔
最佳答案
我认为这对于一个问题来说有点太多了。
我个人认为你看待这个问题的角度是错误的。为什么选择 Entity Framework 和 SQL Azure?您真的认为这些是解决您的问题的最佳技术吗?
我建议您退后一步,研究一下可以使用哪些其他技术。因为您在这里要求的看起来像是一个无架构解决方案,而 SQL Azure/SQL Server 并不是为此构建的。
您可以首先查看 NoSQL(无架构、键值存储)解决方案,可能在 Windows Azure 中。有一份白皮书可以帮助您开始:NoSQL and the Windows Azure platform -- Investigation of an Unlikely Combination
Windows Azure 表存储是一种键值存储,可以解决您的一些问题:
- 客户隔离/多架构:WAZ 表存储支持分区,您可以按客户对数据进行分区,而不是将所有数据放在一起。
- 配置:无需配置任何内容。获取一个存储帐户即可开始。然后,您可以简单地使用一些代码将数据写入该客户的特定分区中。
- 成本(问题中未提及):表存储比 SQL Azure 便宜得多
- ...
关于c# - Windows Azure/SQL Azure 上 Entity Framework 中的动态数据库/架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11718376/