c# - 找不到存储过程 '__ShardManagement.spBulkOperationShardMappingsLocal'

标签 c# entity-framework azure azure-sql-database azure-elastic-scale

我正在将 azure Elastic 数据库模式与 Entity Framework Code First 一起使用。

当我创建新的分片数据库时,当我尝试创建 PointShard map 时,会引发以下异常

     // Register the mapping of the tenant to the shard in the shard map.
        // After this step, DDR on the shard map can be used
        PointMapping<Guid> mapping;
        if (!ShardMap.TryGetMappingForKey(key, out mapping))
        {
            ShardMap.CreatePointMapping(key, shard);
        }

Could not find stored procedure '__ShardManagement.spBulkOperationShardMappingsLocal'

正在创建 EF schema,但未生成分片 schema 和存储过程。

如何确保生成 DbContext 的分片组件?

最佳答案

在删除分片数据库之前,您应该使用 ShardMap.DeleteShard 将其从分片映射管理器中删除。这是安全的删除方法,因为在允许删除分片之前,分片映射管理器将检查是否没有到分片的映射(如果没有到分片的映射,那么希望该分片应该是空的分片)数据 - 尽管最后一部分是您的责任,但分片映射管理器无法为您验证)。

此时,由于您已经删除了数据库,因此您可以使用 RecoveryManager.DetachShard 从分片映射管理器中删除分片数据库。这样做通常很危险,因为到该分片的所有映射都将被删除,这就是为什么 DeleteShard 是首选的原因。

因此,如果您创建一个具有相同名称的新数据库,则需要调用 ShardMap.CreateShard 在该分片数据库上创建分片架构,并将该分片数据库添加到分片映射管理器。但是您没有调用它,因此未创建分片架构。 (请注意,如果您之前没有调用 DeleteShardDetachShardCreateShard 将会失败。)

关于c# - 找不到存储过程 '__ShardManagement.spBulkOperationShardMappingsLocal',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580438/

相关文章:

c# - Entity Framework 性能问题

c# - Entity Framework Core 仍然选择旧专栏

entity-framework - 在 F# 中,什么时候是 "constant string expression"而不是 "constant string expression"

azure - Windows Azure 中的网站可用性

azure - 恢复/回滚 Azure 网站

c# - X509Certificate2.验证行为

c# - 如何使用 C# 表单应用程序将 pdf、xls 等文件添加/插入到 mysql 数据库

c# - C# .NET 3.5 WinForms 部分透明?

c# - visual studio 退出调试没有任何异常或错误

azure - Azure 存储模拟器上有哪些新的 $Metrics 表?