public ICondition Validate(IDataAccessContextBase context, ICondition criteria) { var user = this.User; if (user == null) { return(criteria); } if (criteria == null) { return(Condition.Equal(SITE_ID, user.SiteId)); } if (criteria.Matches(SITE_ID, matched => matched.Value = user.SiteId) > 0) { return(criteria); } if (criteria is ConditionCollection conditions && conditions.Combination == ConditionCombination.And) { conditions.Add(Condition.Equal(SITE_ID, user.SiteId)); return(conditions); } return(ConditionCollection.And(Condition.Equal(SITE_ID, user.SiteId), criteria)); }
public IDataSource GetSource(IDataAccessContextBase context) { if (this.EnsureSources()) { return(this.Selector.GetSource(context, _sources) ?? throw new DataException("No matched data source for this data operation.")); } throw new DataException($"No data sources for the '{_name}' data provider was found."); }
public IDataSource GetSource(IDataAccessContextBase context, IReadOnlyList <IDataSource> sources) { if (sources == null) { return(_source); } return(sources[0]); }
private DataAccessMode GetAccessMode(IDataAccessContextBase context) { switch (context.Method) { case DataAccessMethod.Exists: case DataAccessMethod.Select: case DataAccessMethod.Aggregate: return(DataAccessMode.ReadOnly); default: return(DataAccessMode.WriteOnly); } }
public IDataSource GetSource(IDataAccessContextBase context, IReadOnlyList <IDataSource> sources) { if (sources == null || sources.Count == 0) { return(null); } var mode = this.GetAccessMode(context); var matches = sources.Where(p => (p.Mode & mode) == mode).ToArray(); if (matches.Length == 1) { return(matches[0]); } //获取一个随机的下标 var index = Zongsoft.Common.Randomizer.GenerateInt32() % matches.Length; return(matches[index]); }
protected virtual void OnFiltered(IDataAccessContextBase context) { switch (context.Method) { case DataAccessMethod.Count: this.OnCounted((DataCountContextBase)context); break; case DataAccessMethod.Exists: this.OnExisted((DataExistContextBase)context); break; case DataAccessMethod.Increment: this.OnIncremented((DataIncrementContextBase)context); break; case DataAccessMethod.Select: this.OnSelected((DataSelectContextBase)context); break; case DataAccessMethod.Delete: this.OnDeleted((DataDeleteContextBase)context); break; case DataAccessMethod.Insert: this.OnInserted((DataInsertContextBase)context); break; case DataAccessMethod.Update: this.OnUpdated((DataUpdateContextBase)context); break; case DataAccessMethod.Upsert: this.OnUpserted((DataUpsertContextBase)context); break; case DataAccessMethod.Execute: this.OnExecuted((DataExecuteContextBase)context); break; } }
protected override void OnFiltering(IDataAccessContextBase context) { //首先调用全局过滤器的前趋部分 foreach (var filter in DataEnvironment.Filters) { if (filter == null) { continue; } var predication = filter as Zongsoft.Services.IPredication; if (predication == null || predication.Predicate(context)) { filter.OnFiltering(context); } } //最后调用本数据访问器的过滤器前趋部分 base.OnFiltering(context); }
void Common.IExecutionFilter <IDataAccessContextBase> .OnFiltering(IDataAccessContextBase context) { this.OnFiltering(context); }
public void OnFiltered(IDataAccessContextBase context) { switch (context) { case DataExistContextBase existing: var exists = _exists; if (exists != null) { foreach (var filter in exists) { filter.OnFiltered(existing); } } break; case DataSelectContextBase selection: var selects = _selects; if (selects != null) { foreach (var filter in selects) { filter.OnFiltered(selection); } } break; case DataDeleteContextBase deletion: var deletes = _deletes; if (deletes != null) { foreach (var filter in deletes) { filter.OnFiltered(deletion); } } break; case DataInsertContextBase insertion: var inserts = _inserts; if (inserts != null) { foreach (var filter in inserts) { filter.OnFiltered(insertion); } } break; case DataUpdateContextBase updation: var updates = _updates; if (updates != null) { foreach (var filter in updates) { filter.OnFiltered(updation); } } break; case DataUpsertContextBase upsertion: var upserts = _upserts; if (upserts != null) { foreach (var filter in upserts) { filter.OnFiltered(upsertion); } } break; case DataExecuteContextBase execution: var executes = _executes; if (executes != null) { foreach (var filter in executes) { filter.OnFiltered(execution); } } break; case DataAggregateContextBase aggregation: var aggregates = _aggregates; if (aggregates != null) { foreach (var filter in aggregates) { filter.OnFiltered(aggregation); } } break; } }
public IDataSource GetSource(IDataAccessContextBase context) { return(_source); }