实体框架4,SQL Azure,每个客户一个数据库或表的前缀?

时间:2011-04-19 08:43:02

标签: entity-framework entity azure-sql-database

我们希望将数据库迁移到SQL Azure,但由于Azure的定价模型与SQL 2k8R2的定价模型不同(显然),我们需要重新考虑数据库的结构。现在的结构是每个客户一个数据库,但是对于Azure,我们需要为每个数据库付费,即使我们可能只使用一小部分容量(在10MB范围内)。这使我们成为问题。最简单的解决方案是使用客户唯一标识符为模型中的每个表添加前缀。有没有在运行时更改映射,或者这种情况不适合Azure?

几周前我问了一个类似的问题,但不完全相同: Change table name at runtime using Entity Framework 4

编辑:我在SQL Azure中尝试过联盟,但它似乎尚未生效。我想出的解决方案是在一个数据库中拥有多个客户,并支持分区。我们的存储库现在公开了IQueryables,其中包含了一个Where-func,用于为特定客户分离实体:

public IQueryable<TestEntity> 
{ 
   get 
   { 
      return _ctx.Set<TestEntity>().Where(entity => entity.CustomerId == _customerId); 
   }
}

1 个答案:

答案 0 :(得分:3)

您可以考虑使用架构。

对于每位客户,您创建:   - 在服务器上登录   - 映射到此登录的用户   - 此用户拥有的架构   - 并将模式定义为用户的默认模式

如果您不使用[schema]。[objectname]表示法但只使用[objectname]表示法,则将使用默认架构。

当然不是完美的解决方案,但它应该有效。