Ejemplo n.º 1
0
        public MongoCollection <TEntity> GetCollection <TEntity>(ShardParams shardParams)
        {
            var strategy = RepositoryFramework.GetShardStrategy(typeof(TEntity));

            if (strategy == null)
            {
                throw new ArgumentNullException("strategy", String.Format("无法找到类型 {0} 对应的分区策略信息。", typeof(TEntity).FullName));
            }

            var shardId     = strategy.GetShardId(shardParams);
            var partitionId = strategy.GetPartitionId(shardParams);

            var database = GetDatabase(shardId);

            if (partitionId == null)
            {
                var metadata = RepositoryFramework.GetDefineMetadata(typeof(TEntity));
                if (metadata != null && !String.IsNullOrEmpty(metadata.Table))
                {
                    return(database.GetCollection <TEntity>(metadata.Table));
                }

                return(database.GetCollection <TEntity>(typeof(TEntity).Name));
            }
            return(database.GetCollection <TEntity>(partitionId.RealTableName));
        }
        public IShardSession <TEntity> OpenSession <TEntity>(ShardParams shardParams)
        {
            var strategy = RepositoryFramework.GetShardStrategy(typeof(TEntity));

            if (strategy == null)
            {
                throw new ArgumentNullException("strategy", String.Format("无法找到类型 {0} 对应的分区策略信息。", typeof(TEntity).FullName));
            }

            var shardId     = strategy.GetShardId(shardParams);
            var partitionId = strategy.GetPartitionId(shardParams);

            using (var scope = ProfilerContext.Profile("open nhibernate session"))
            {
                var session = manager.OpenSession(shardId, partitionId);
                return(new NHibernateShardSession <TEntity>(session));
            }
        }