我正在将 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
在该分片数据库上创建分片架构,并将该分片数据库添加到分片映射管理器。但是您没有调用它,因此未创建分片架构。 (请注意,如果您之前没有调用 DeleteShard
或 DetachShard
,CreateShard
将会失败。)
关于c# - 找不到存储过程 '__ShardManagement.spBulkOperationShardMappingsLocal',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580438/