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)); }
internal LinqSpecification(ISpecificationProvider provider, ShardParams shardParams, Expression <Func <T, bool> > expr) { this.provider = provider; this.criteriaExpression = expr; this.shardParams = shardParams; this.thenByExpressions = new List <QueryOrderExpression>(); }
public ISpecification <T> Shard <T>(ISpecification <T> spec, ShardParams shardParams) { LinqSpecification <T> linqSpec = (LinqSpecification <T>)spec; linqSpec.ShardParams = shardParams; return(linqSpec); }
public ISpecification <T> Shard <T>(ISpecification <T> spec, ShardParams shardParams) { NHibernateSpecification <T> nhSpec = (NHibernateSpecification <T>)spec; nhSpec.ShardParams = shardParams; return(nhSpec); }
public ISpecification <T> Shard <T>(ISpecification <T> spec, ShardParams shardParams) { IBatisNetSpecification <T> batisSpec = (IBatisNetSpecification <T>)spec; spec.Shard(shardParams); return(batisSpec); }
public ISpecification <T> Shard <T>(ISpecification <T> spec, ShardParams shardParams) { MongoSpecification <T> mongoSpec = (MongoSpecification <T>)spec; mongoSpec.ShardParams = shardParams; return(mongoSpec); }
public virtual IList <T> GetList <T>(ShardParams shardParams, IEnumerable ids) { Trace <T>("GetList", "{\"_id\": [" + String.Join(",", ids) + "]}"); IMongoQuery query = Query.In("_id", BsonArray.Create(ids)); return(GetCollection <T>(shardParams).FindAs <T>(query).ToList()); }
internal IBatisNetSpecification(ISpecificationProvider provider, ShardParams shardParams, Expression <Func <T, bool> > expr) { this.mProvider = provider; this.mShardParams = shardParams; this.mCriteriaExpression = expr; }
public static ISession GetSession <TEntity>(this AbstractUserShardRepository <TEntity> repository, long userId) where TEntity : class { var nr = (AbstractRepository <TEntity>)repository; return(((NHibernateShardSession <TEntity>)nr.OpenSession(ShardParams.Form(userId))).InnerSession); }
/// <summary> /// 定义规约的分区分表参数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="spec"></param> /// <param name="shardParam"></param> /// <returns></returns> public static ISpecification <T> Shard <T>(this ISpecification <T> spec, long shardParam1, long shardParam2) { if (spec == null) { throw new ArgumentNullException("spec"); } return(spec.Provider.Shard(spec, ShardParams.Form(shardParam1, shardParam2))); }
public void Update <T>(ShardParams shardParams, T entity) { var getter = BsonClassMap.LookupClassMap(typeof(T)).IdMemberMap.Getter; Trace <T>("Update", "{\"_id\":\"" + getter(entity).ToString() + "\"}"); GetCollection <T>(shardParams).Save <T>(entity, safeMode); }
public void Delete <T>(ShardParams shardParams, T entity) { var getter = BsonClassMap.LookupClassMap(typeof(T)).IdMemberMap.Getter; var id = getter(entity); Trace <T>("Delete", "{\"_id\":\"" + getter(entity).ToString() + "\"}"); GetCollection <T>(shardParams).Remove(Query.EQ("_id", BsonValue.Create(id)), safeMode); }
public virtual IList <TEntity> GetList(ShardParams shardParams, IEnumerable ids) { if (!ids.GetEnumerator().MoveNext()) { return(new List <TEntity>()); } return(OpenSession(shardParams).GetList(ids)); }
public void AddToSet <TEntity, TSet>(ShardParams shardParams, TEntity entity, Expression <Func <TEntity, object> > expr, IEnumerable <TSet> setIds) { var classMap = BsonClassMap.LookupClassMap(typeof(TEntity)); //查询条件 var query = Query.EQ(classMap.IdMemberMap.ElementName, BsonValue.Create(classMap.IdMemberMap.Getter(entity))); //需要批量更新的字段名 var setName = classMap.GetMemberMap((expr.Body as MemberExpression).Member.Name).ElementName; //执行的更新语句 var update = MongoDB.Driver.Builders.Update.AddToSetEachWrapped <TSet>(setName, setIds); //执行语句 GetCollection <TEntity>(shardParams).Update(query, update, SafeMode.True); }
public override PartitionId GetPartitionId(ShardParams shardParams) { var v = param2 ? shardParams.Param2 : shardParams.Param1; DateTime nowtime = DateTimeExtend.FromUnixTime(v); string tid; if (!debug) { tid = nowtime.Year.ToString() + nowtime.Month.ToString().PadLeft(2, '0'); } else { tid = "00"; } return(new PartitionId(table, String.Format(format, tid))); }
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)); } }
/// <summary> /// expr为获取 lockVersion的表达式 /// LockValue从1开始。0用来兼容旧的数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <param name="expr"></param> /// <returns></returns> public bool UpdateForOptimisticLock <T>(ShardParams shardParams, T entity, Expression <Func <T, byte> > expr, Func <T, bool> newFunc) { if (newFunc(entity)) { Create(shardParams, entity); return(true); } else { var classMap = BsonClassMap.LookupClassMap(typeof(T)); var lockVersionMap = classMap.GetMemberMap((expr.Body as MemberExpression).Member.Name); var oldLockValue = Convert.ToByte(lockVersionMap.Getter(entity)); var newLockValue = oldLockValue == byte.MaxValue ? 1 : oldLockValue + 1; //query var mongoQuery = new List <IMongoQuery> { }; mongoQuery.Add(Query.EQ(classMap.IdMemberMap.ElementName, BsonValue.Create(classMap.IdMemberMap.Getter(entity)))); if (oldLockValue != 0) { mongoQuery.Add(Query.EQ(lockVersionMap.ElementName, (byte)lockVersionMap.Getter(entity))); } var query = Query.And(mongoQuery.ToArray()); //update UpdateBuilder update = MongoDB.Driver.Builders.Update.Set(lockVersionMap.ElementName, newLockValue); foreach (var memberMap in classMap.MemberMaps) { if (memberMap.ElementName != classMap.IdMemberMap.ElementName && memberMap.ElementName != lockVersionMap.ElementName) { update = update.Set(memberMap.ElementName, BsonValue.Create((memberMap.Getter(entity)))); } } //mongoDB语句跟踪 Trace <T>("UpdateForOptimisticLock", "{\"_id\":\"" + classMap.IdMemberMap.Getter(entity).ToString() + "\",\"lockVersion\":\"" + oldLockValue + "\"}"); var result = GetCollection <T>(shardParams).FindAndModify(query, SortBy.Null, update, false, false); return(!(result.Response.GetValue(0) is BsonNull)); } }
/// <summary> /// 打开一个 IShardSession 实例 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="shardParams"></param> /// <returns></returns> public static IShardSession <TEntity> OpenSession <TEntity>(ShardParams shardParams) { return(frameworkConfiguation.GetSessionFactory(typeof(TEntity), true).OpenSession <TEntity>(shardParams)); }
public static ISession GetSession <TEntity>(this AbstractRepository <TEntity> repository, ShardParams shardParams) where TEntity : class { var nr = (AbstractRepository <TEntity>)repository; return(((NHibernateShardSession <TEntity>)nr.OpenSession(shardParams)).InnerSession); }
public override ShardId GetShardId(ShardParams shardParams) { return(shardId); }
public override PartitionId GetPartitionId(ShardParams shardParams) { return(null); }
public virtual ISpecification <TEntity> CreateSpecification(long userId) { return(CreateSpecification(ShardParams.Form(userId))); }
public virtual TEntity Get(int courseId, object id) { return(Get(ShardParams.Form(courseId), id)); }
public virtual TEntity Get(long userId, object id) { return(Get(ShardParams.Form(userId), id)); }
public IShardSession <TEntity> OpenSession <TEntity>(ShardParams shardParams) { return(new MongoShardSession <TEntity>(new MongoSession(mongoManager), shardParams)); }
public override ShardId GetShardId(ShardParams shardParams) { return(new ShardId(shard)); }
public HasManyByForeignKeyDefine Shard(long param1, long param2) { ShardParams = ShardParams.Form(param1, param2); return(this); }
public virtual IList <TEntity> GetList(long userId, System.Collections.IEnumerable ids) { return(GetList(ShardParams.Form(userId), ids)); }
public abstract PartitionId GetPartitionId(ShardParams shardParams);
public abstract ShardId GetShardId(ShardParams shardParams);