예제 #1
0
 public TRoot Find(object id, QueryLevel level)
 {
     return(DataContext.Current.RegisterQueried <TRoot>(level, () =>
     {
         return PersistFind(id, level);
     }));
 }
예제 #2
0
 public void OpenLock(QueryLevel level)
 {
     if (IsLockQuery(level))
     {
         OpenTimelyMode();
     }
 }
예제 #3
0
 private void TryAddMirror <T>(QueryLevel level, T root) where T : IAggregateRoot
 {
     if (level == QueryLevel.Mirroring)
     {
         AddMirror(root);
     }
 }
예제 #4
0
        /// <summary>
        /// 向数据上下文注册查询,该方法会控制锁和同步查询结果
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="result"></param>
        public IEnumerable <T> RegisterQueried <T>(QueryLevel level, Func <IEnumerable <T> > persistQuery) where T : IAggregateRoot
        {
            this.OpenLock(level);
            var result = persistQuery();

            TryAddMirrors(level, result);
            return(result);
        }
예제 #5
0
        /// <summary>
        /// 向数据上下文注册查询,该方法会控制锁和同步查询结果
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="result"></param>
        public Page <T> RegisterQueried <T>(QueryLevel level, Func <Page <T> > persistQuery) where T : IAggregateRoot
        {
            this.OpenLock(level);
            var page   = persistQuery();
            var result = page.Objects;

            TryAddMirrors(level, result);
            return(page);
        }
예제 #6
0
        public override bool Equals(object obj)
        {
            QueryLevel target = obj as QueryLevel;

            if (target == null)
            {
                return(false);
            }
            return(this.Code == target.Code);
        }
예제 #7
0
 private void TryAddMirrors <T>(QueryLevel level, IEnumerable <T> objs) where T : IAggregateRoot
 {
     if (level == QueryLevel.Mirroring)
     {
         foreach (var obj in objs)
         {
             AddMirror(obj);
         }
     }
 }
            /// <summary>
            /// 使用自定义方法加载参数数据
            /// </summary>
            /// <param name="data"></param>
            /// <param name="obj"></param>
            /// <returns></returns>
            public bool TryLoadData(Type objectType, DynamicData data, QueryLevel level, out object value)
            {
                value = null;
                var method = _getLoadData(objectType) ?? _loadData;

                if (method == null)
                {
                    return(false);
                }
                using (var temp = ArgsPool.Borrow2())
                {
                    var args = temp.Item;
                    args[0] = data;
                    args[1] = level;
                    value   = method.Invoke(null, args);
                }
                return(true);
            }
예제 #9
0
 protected abstract TRoot PersistFind(object id, QueryLevel level);
예제 #10
0
 IAggregateRoot IRepository.Find(object id, QueryLevel level)
 {
     return(Find(id, level));
 }
예제 #11
0
 /// <summary>
 /// 向数据上下文注册查询,该方法会控制锁和同步查询结果
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="result"></param>
 public Page <T> RegisterQueried <T>(QueryLevel level, Func <Page <T> > persistQuery) where T : IAggregateRoot
 {
     this.OpenLock(level);
     return(persistQuery());
 }
예제 #12
0
 private bool IsLockQuery(QueryLevel level)
 {
     return(level == QueryLevel.HoldSingle || level == QueryLevel.Single || level == QueryLevel.Share);
 }
예제 #13
0
        internal static EventLock Find(Guid queueId, QueryLevel level)
        {
            var repository = Repository.Create <IEventLockRepository>();

            return(repository.Find(queueId, level));
        }