问题描述
|
我们希望将数据库迁移到sql Azure,但是由于Azure的定价模型与sql 2k8R2的定价模型不同(显然),因此我们需要重新考虑数据库的结构。目前的结构是每个客户一个数据库,但是使用Azure,即使我们可能只使用容量的一小部分(在10MB范围内),我们也需要为每个数据库付费。这对我们来说是个问题。最简单的解决方案是在模型中的每个表前面加上客户唯一标识符。无论如何,是否需要在运行时更改映射,还是这种情况不适用于Azure?
几周前,我问了一个类似的问题,但并不完全相同:
使用Entity Framework 4在运行时更改表名
编辑:我在sql Azure中尝试了联盟,但是它似乎还没有生效。我想出的解决方案是在一个数据库中拥有多个客户,并支持分区。现在,我们的存储库将使用已经包含Where-func的IQueryables来为特定客户分离实体:
public IQueryable<TestEntity>
{
get
{
return _ctx.Set<TestEntity>().Where(entity => entity.CustomerId == _customerId);
}
}
解决方法
您可以考虑使用架构。
为每个客户创建:
-服务器上的登录名
-映射到此登录名的用户
-此用户拥有的架构
-并且您将架构定义为用户的默认架构
如果不使用[schema]。[objectname]表示法,而仅使用[objectname]表示法,则将使用默认模式。
当然不是完美的解决方案,但它应该可以工作。