C# Windows Azure/SQL Azure上实体框架中的动态数据库/架构

C# Windows Azure/SQL Azure上实体框架中的动态数据库/架构,c#,asp.net-mvc-3,entity-framework,azure,azure-sql-database,C#,Asp.net Mvc 3,Entity Framework,Azure,Azure Sql Database,我们目前正在开发SAAS应用程序代码Finacity,它将托管在Windows Azure平台上,主数据库将是SQL Azure 以下是我们产品的一些技术规格: 开发环境-Asp.NET4.0和MVC3(Razor),实体框架 数据库-SQL Azure 以下是我们的商业案例: 我们的产品是SAAS产品,由于它将包含客户的财务数据,我们将为每个客户提供单独的数据库,以实现更高级别的多租户、数据隔离和安全性 现在,客户机可以在其帐户下创建多个公司,这些公司将通过特定客户机数据库下的模式进行分

我们目前正在开发SAAS应用程序代码Finacity,它将托管在Windows Azure平台上,主数据库将是SQL Azure

以下是我们产品的一些技术规格:

  • 开发环境-Asp.NET4.0和MVC3(Razor),实体框架
  • 数据库-SQL Azure
以下是我们的商业案例:

  • 我们的产品是SAAS产品,由于它将包含客户的财务数据,我们将为每个客户提供单独的数据库,以实现更高级别的多租户、数据隔离和安全性
  • 现在,客户机可以在其帐户下创建多个公司,这些公司将通过特定客户机数据库下的模式进行分隔
注意:每个架构的表结构都是相同的

下面是一些场景,可以让您更深入地了解我们的应用程序流程

场景1:

  • 为了在客户端注册时提供新的数据库,我们将运行存储过程,该过程将创建具有基本结构的数据库
  • 我们的疑问是:在SQLAzure上这样做是正确的还是有其他方法
场景2:

  • 为了访问客户机数据库下的多个模式,我们为各个模式动态生成了SSDL文件,并将该文件用于连接
  • 我们的疑问是:有没有其他方法可以做到这一点,比如对多个连接使用同一个SSDL文件实例,并为连接传递元数据
场景3:

  • 由于我们的应用程序支持即席查询和从Excel文件创建动态表,我们将提供一个向导,该向导将在后端运行存储过程,并在客户端数据库的特定模式下从向导中选择标题时从Excel文件动态创建该表
  • 我们的疑问:建议我们更好的方法,如果有的话
场景4:

  • 现在,随着新表添加到模式中,我们必须更新EDMX文件以从新创建的表中获取数据。为此,我们将运行存储过程,该过程将从新创建的表中获取数据
  • 我们的疑问是:有没有办法更新EDMX文件运行时并获取数据
需要针对上面列出的每个场景提供最佳解决方案的建议

先谢谢你


致以最良好的祝愿-萨希尔

我认为这对于一个问题来说有点太多了

我个人认为你从一个错误的角度看待它。为什么选择实体框架和SQLAzure?你真的认为这些是解决你的问题的最好的技术吗

我建议你退一步,研究一下还有哪些其他技术可以使用。因为您在这里提出的问题看起来像是一个无模式的解决方案,而SQL Azure/SQL Server并不是为该IMHO构建的

您可以从查看NoSQL(无模式、键值存储)解决方案开始,可能是在WindowsAzure中。有一份白皮书将帮助您开始这方面的工作:

Microsoft Azure Table Storage是一个键值存储,可以解决您的一些问题:

  • 客户隔离/多模式:WAZ表存储支持分区,您可以按客户对数据进行分区,而不是将所有数据放在一起
  • 供应:不需要供应任何东西。获得一个存储帐户,您就可以开始了。然后,您可以简单地使用一些代码,将数据写入该客户的特定分区中
  • 成本(问题中未提及):表存储比SQLAzure便宜得多

您应该将此问题划分为关于EF和SQL Azure的单独问题。顺便说一句,场景4超出了EF的范围-您必须直接使用SQL/存储过程查询动态表,而不使用EF。