/// <summary> /// 为指定的仓库加载所有的仓库扩展类。 /// </summary> /// <param name="repository"></param> private void AddExtensions(EntityRepository repository) { var list = new List <IRepositoryExt>(); this.LoadAllExtensions(); //把对该类及它的基类的扩展都加入进来。 var baseTypes = TypeHelper.GetHierarchy(repository.GetType(), typeof(EntityRepositoryQueryBase)).Reverse().ToArray(); foreach (var baseType in baseTypes) { List <Type> extList = null; if (this._extByType.TryGetValue(baseType, out extList)) { foreach (var extType in extList) { var ext = this.CreateInstanceProxy(extType) as IRepositoryExt; list.Add(ext); (ext as IRepositoryExtInternal).BindRepository(repository); } } } repository.Extensions = new ReadOnlyCollection <IRepositoryExt>(list); }
/// <summary> /// 把一个 Linq 查询转换为 IQuery 查询。 /// </summary> /// <param name="queryable"></param> /// <returns></returns> protected IQuery ConvertToQuery(IQueryable queryable) { if (queryable.Provider != Repo.RdbDataProvider.LinqProvider) { throw new InvalidProgramException(string.Format("查询所属的仓库类型应该是 {0}。", Repo.GetType())); } var expression = queryable.Expression; expression = Evaluator.PartialEval(expression); var builder = new EntityQueryBuilder(this.Repo); var query = builder.BuildQuery(expression); return(query); }
/// <summary> /// 为指定的仓库加载所有的仓库扩展类。 /// </summary> /// <param name="repository"></param> private void AddExtensions(EntityRepository repository) { var list = new List<IRepositoryExt>(); this.LoadAllExtensions(); //把对该类及它的基类的扩展都加入进来。 var baseTypes = TypeHelper.GetHierarchy(repository.GetType(), typeof(EntityRepositoryQueryBase)).Reverse().ToArray(); foreach (var baseType in baseTypes) { List<Type> extList = null; if (this._extByType.TryGetValue(baseType, out extList)) { foreach (var extType in extList) { var ext = CreateExt(extType); list.Add(ext); (ext as IRepositoryExtInternal).BindRepository(repository); } } } repository.Extensions = new ReadOnlyCollection<IRepositoryExt>(list); }