Exemple #1
0
 public AbstractRepository()
 {
     sessionFactory = RepositoryFramework.GetSessionFactory(typeof(TEntity));
     if (sessionFactory == null)
     {
         throw new ArgumentNullException("sessionFactory", String.Format("类型 {0} 未配置 IShardSessionFactory", typeof(TEntity).FullName));
     }
 }
Exemple #2
0
        public void Load()
        {
            var shardNode = section.TryGetNode("shard");

            if (shardNode != null)
            {
                var dst = shardNode.TryGetValue("defaultStrategy");
                if (!String.IsNullOrEmpty(dst))
                {
                    defaultStrategyType = Type.GetType(dst);
                }

                defaultAttr.Add("shard", shardNode.TryGetValue("defaultShard"));

                defaultSessionFactory = CreateShardSessionFactory(shardNode, "defaultSessionFactory");

                foreach (var item in shardNode.TryGetNodes("entities/entity"))
                {
                    var entityType = Type.GetType(item.TryGetValue("type"));
                    if (entityType == null)
                    {
                        throw new ArgumentNullException("entityType");
                    }

                    var  stategyString = item.TryGetValue("strategy");
                    Type strategyType  = null;
                    if (!String.IsNullOrEmpty(stategyString))
                    {
                        strategyType = Type.GetType(stategyString);
                    }
                    if (strategyType == null)
                    {
                        strategyType = defaultStrategyType;
                    }

                    if (strategyType == null)
                    {
                        throw new PlatformException("类型 {0} 没有定义分区策略", entityType.FullName);
                    }

                    RegisterShardStragety(entityType, strategyType, item.Attributes);

                    var factoryString = item.TryGetValue("sessionFactory");
                    if (!String.IsNullOrEmpty(factoryString))
                    {
                        Type factoryType = Type.GetType(factoryString);
                        RegisterShardSessionFactory(entityType, factoryType);
                    }
                }
            }
        }