예제 #1
0
        /// <summary>
        /// 构建单表删除的语句,因为不支持多表删除所以单表删除操作由多条语句以主从树形结构来表达需要进行的多批次的删除操作。
        /// </summary>
        /// <param name="context">构建操作需要的数据访问上下文对象。</param>
        /// <returns>返回的单表删除的多条语句的主句。</returns>
        protected virtual IStatementBase BuildComplexity(DataDeleteContext context)
        {
            var statement = new DeleteStatement(context.Entity);

            //生成条件子句
            statement.Where = statement.Where(context.Condition);

            return(this.BuildMaster(statement, context.Schema.Members));
        }
        /// <summary>
        /// 构建单表删除的语句,因为不支持多表删除所以单表删除操作由多条语句以主从树形结构来表达需要进行的多批次的删除操作。
        /// </summary>
        /// <param name="context">构建操作需要的数据访问上下文对象。</param>
        /// <returns>返回的单表删除的多条语句的主句。</returns>
        protected virtual IEnumerable <IStatementBase> BuildComplexity(DataDeleteContext context)
        {
            var statement = new DeleteStatement(context.Entity);

            //生成条件子句
            statement.Where = statement.Where(context.Validate());

            if (!context.Schema.IsEmpty)
            {
                this.BuildReturning(statement, context.Schema.Members);
            }

            yield return(statement);
        }
        /// <summary>
        /// 构建支持多表删除的语句。
        /// </summary>
        /// <param name="context">构建操作需要的数据访问上下文对象。</param>
        /// <returns>返回多表删除的语句。</returns>
        protected virtual IEnumerable <IStatementBase> BuildSimplicity(DataDeleteContext context)
        {
            var statement = new DeleteStatement(context.Entity);

            //构建当前实体的继承链的关联集
            this.Join(statement, statement.Table).ToArray();

            //获取要删除的数据模式(模式不为空)
            if (!context.Schema.IsEmpty)
            {
                //依次生成各个数据成员的关联(包括它的继承链、子元素集)
                foreach (var schema in context.Schema.Members)
                {
                    this.Join(statement, statement.Table, schema);
                }
            }

            //生成条件子句
            statement.Where = statement.Where(context.Validate());

            yield return(statement);
        }