c# - Windows Azure/SQL Azure 上 Entity Framework 中的动态数据库/架构

标签 c# asp.net-mvc-3 entity-framework azure azure-sql-database

我们目前正在开发代号为 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/

相关文章:

c# - LINQ 按嵌套集合过滤列表

asp.net-mvc-3 - 系统参数异常 : Duplicate type name within an assembly

c# - 如何使用 Entity Framework 在 C#、ASP.NET MVC 3 中获取两个日期之间的记录?

c# - 在 ASP.NET 上检测 JSON 请求的最佳方法是什么

c# - 在 C# 中创建一个简单的工厂类

c# - T4MVC - 不同的 Controller 冲突

asp.net-mvc - Asp.Net MVC 3 Razor 渲染错误?

c# - Entity Framework 查询以获取子项

c# - EF 扩展方法 : "This function can only be invoked from LINQ to Entities."

c# - C# 中的快速傅立叶变换