Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }