C# 找不到存储过程'__ShardManagement.spBulkOperationShardMappingsLocal';

C# 找不到存储过程'__ShardManagement.spBulkOperationShardMappingsLocal';,c#,entity-framework,azure,azure-sql-database,azure-elastic-scale,C#,Entity Framework,Azure,Azure Sql Database,Azure Elastic Scale,我首先使用带有实体框架代码的azure弹性数据库模式 当我创建一个新的Shard数据库时,当我尝试创建PointShard映射时,会引发以下异常 // 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;

我首先使用带有实体框架代码的azure弹性数据库模式

当我创建一个新的Shard数据库时,当我尝试创建
PointShard
映射时,会引发以下异常

     // 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);
        }
//在碎片映射中注册租户到碎片的映射。
//在此步骤之后,可以使用碎片映射上的DDR
点映射;
if(!ShardMap.TryGetMappingForKey(键,出映射))
{
CreatePointMapping(key,shard);
}
找不到存储过程 “u ShardManagement.spBulkOperationShardMappingsLocal”

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


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

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

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


因此,如果使用相同的名称创建新数据库,则需要调用
ShardMap.CreateShard
在该分片数据库上创建分片模式,并将该分片数据库添加到分片映射管理器中。但是您没有调用它,因此没有创建切分模式。(请注意,
CreateShard
如果您之前没有调用
DeleteShard
DetachShard
将失败。)

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

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


因此,如果使用相同的名称创建新数据库,则需要调用
ShardMap.CreateShard
在该分片数据库上创建分片模式,并将该分片数据库添加到分片映射管理器中。但是您没有调用它,因此没有创建切分模式。(请注意,
CreateShard
如果之前没有调用
DeleteShard
DetachShard
将失败。)

创建碎片数据库后,必须调用CreateShard来创建表和存储过程以支持碎片。下面是我们的碎片创建类中的一段代码。一旦创建了数据库,我们就执行它

var shardMapManagerConnectionString = ConfigurationManager.ConnectionStrings["CommonConnectionString"].ConnectionString;
var shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(shardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy);
var shardMap = shardMapManager.GetListShardMap<Guid>("shardMapName");

var shardLocation = new ShardLocation(shardServerName, shardName);

var shard = shardMap.CreateShard(shardLocation);
var shardMapManagerConnectionString=ConfigurationManager.ConnectionString[“CommonConnectionString”].ConnectionString;
var shardMapManager=ShardMapManagerFactory.GetSqlShardMapManager(shardMapManagerConnectionString,ShardMapManagerLoadPolicy.Lazy);
var shardMap=shardMapManager.GetListShardMap(“shardmapaname”);
var shardLocation=新的shardLocation(shardServerName,shardName);
var shard=shardMap.CreateShard(shardLocation);

调用CreateShard后,您可以调用
CreatePointMapping

创建碎片数据库后,您必须调用CreateShard来创建支持碎片的表和存储过程。下面是我们的碎片创建类中的一段代码。一旦创建了数据库,我们就执行它

var shardMapManagerConnectionString = ConfigurationManager.ConnectionStrings["CommonConnectionString"].ConnectionString;
var shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(shardMapManagerConnectionString, ShardMapManagerLoadPolicy.Lazy);
var shardMap = shardMapManager.GetListShardMap<Guid>("shardMapName");

var shardLocation = new ShardLocation(shardServerName, shardName);

var shard = shardMap.CreateShard(shardLocation);
var shardMapManagerConnectionString=ConfigurationManager.ConnectionString[“CommonConnectionString”].ConnectionString;
var shardMapManager=ShardMapManagerFactory.GetSqlShardMapManager(shardMapManagerConnectionString,ShardMapManagerLoadPolicy.Lazy);
var shardMap=shardMapManager.GetListShardMap(“shardmapaname”);
var shardLocation=新的shardLocation(shardServerName,shardName);
var shard=shardMap.CreateShard(shardLocation);
调用CreateShard后,您可以调用
CreatePointMapping