public TRoot Find(object id, QueryLevel level) { return(DataContext.Current.RegisterQueried <TRoot>(level, () => { return PersistFind(id, level); })); }
public void OpenLock(QueryLevel level) { if (IsLockQuery(level)) { OpenTimelyMode(); } }
private void TryAddMirror <T>(QueryLevel level, T root) where T : IAggregateRoot { if (level == QueryLevel.Mirroring) { AddMirror(root); } }
/// <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); }
/// <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); }
public override bool Equals(object obj) { QueryLevel target = obj as QueryLevel; if (target == null) { return(false); } return(this.Code == target.Code); }
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); }
protected abstract TRoot PersistFind(object id, QueryLevel level);
IAggregateRoot IRepository.Find(object id, QueryLevel level) { return(Find(id, level)); }
/// <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()); }
private bool IsLockQuery(QueryLevel level) { return(level == QueryLevel.HoldSingle || level == QueryLevel.Single || level == QueryLevel.Share); }
internal static EventLock Find(Guid queueId, QueryLevel level) { var repository = Repository.Create <IEventLockRepository>(); return(repository.Find(queueId, level)); }