1

Entity Framework Code First で Azure Elastic データベース パターンを使用しています。

新しいシャード データベースを作成すると、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);
        }

ストアド プロシージャ '__ShardManagement.spBulkOperationShardMappingsLocal' が見つかりませんでした

EF スキーマは作成されていますが、シャーディング スキーマとストアド プロシージャは生成されていません。

私のシャーディングコンポーネントが確実にDbContext生成されるようにするにはどうすればよいですか?

4

2 に答える 2

0

シャード データベースを作成したら、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);

CreateShard を呼び出した後、 を呼び出すことができますCreatePointMapping

于 2016-11-15T00:31:12.910 に答える
0

シャード データベースを削除する前に、 を使用してシャード マップ マネージャーから削除する必要がありますShardMap.DeleteShard。シャードの削除を許可する前に、シャード マップ マネージャーがシャードへのマッピングがないことを確認するため、これは安全な削除方法です (シャードへのマッピングがない場合は、シャードが空であることを願っています)。データ - 最後の部分はあなたの責任ですが、シャード マップ マネージャーはそれを確認できません)。

この時点で既にデータベースを削除しているため、代わりに を使用してシャード マップ マネージャーからシャード データベースを削除できますRecoveryManager.DetachShard。そのシャードへのすべてのマッピングが削除されるため、これを行うのは通常危険ですDeleteShard

したがって、同じ名前で新しいデータベースを作成する場合は、呼び出しShardMap.CreateShardてそのシャード データベースにシャーディング スキーマを作成し、そのシャード データベースをシャード マップ マネージャーに追加する必要があります。ただし、これを呼び出していないため、シャーディング スキーマは作成されませんでした。(以前にCreateShard電話していない場合は失敗することに注意してください。)DeleteShardDetachShard

于 2016-11-15T00:01:52.283 に答える