public string GenerateDocumentKey(DocumentConvention conventions, object entity)
{
var shardId = shardedDocumentStore.ShardStrategy.ShardResolutionStrategy.MetadataShardIdFor(entity);
if (shardId == null)
{
throw new InvalidOperationException(string.Format(
"ShardResolutionStrategy.MetadataShardIdFor cannot return null. You must specify where to store the metadata documents for the entity type '{0}'.", entity.GetType().FullName));
}
MultiTypeHiLoKeyGenerator value;
if (generatorsByShard.TryGetValue(shardId, out value))
{
return(value.GenerateDocumentKey(conventions, entity));
}
lock (this)
{
if (generatorsByShard.TryGetValue(shardId, out value) == false)
{
value = new MultiTypeHiLoKeyGenerator(shardedDocumentStore.DatabaseCommandsFor(shardId), capacity);
generatorsByShard = new Dictionary <string, MultiTypeHiLoKeyGenerator>(generatorsByShard)
{
{ shardId, value }
};
}
}
return(value.GenerateDocumentKey(conventions, entity));
}