Exemplo n.º 1
0
        /// <summary>
        /// 使用重复生成的方式,生成删除多个复合关系对象的语句。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForRelationDeleteRepeat(GenerateContext context)
        {
            var data   = (RelationContent)context.Data;
            var repeat = new RepeatBlockFragment(context, data.Items, data.CommitObject.Loader);

            repeat.Block.Add(GenerateForRelationDelete(context));
            return(repeat);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 使用重复生成的方式,生成更新多个对象的语句
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="content">更新表达式。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForUpdateRepeat(GenerateContext context, DbExpression content)
        {
            var data   = (GenerateDataForUpdate)context.Data;
            var block  = (BlockFragment)GenerateForUpdateSingle(context, content);
            var repeat = new RepeatBlockFragment(context, data.Items, data.CommitObject.Loader, block);

            return(repeat);
        }
Exemplo n.º 3
0
        private SqlFragment GenerateForInsertIdentityMultipleRepeat(GenerateContext context, CommitIdentityUnit mainunit, ColumnMetadata rowindex,
                                                                    TemporaryTableFragment temporaryTable, RowIndexFragment rowindexfragment, GenerateDataForInsert data, out TableFragment whileTarget)
        {
            var repeatfragment = new RepeatBlockFragment(context, data.Items);
            var block          = repeatfragment.Block;
            var whileInsert    = context.Insert(temporaryTable, mainunit.Table,
                                                mainunit.Members.Where(a => a.ValueType != ECommitValueType.Database).Select(a => a.Metadata));
            var whileSelect = (QueryBaseFragment)whileInsert.Query;

            whileSelect.Where = context.Equal(temporaryTable.GetMember(rowindex), new RowIndexFragment(context));
            block.Add(whileInsert);
            var whileUpdate = new UpdateFragment(context, temporaryTable);
            var getidentity = whileUpdate.CreateExpression(
                context.Translate(Expression.Call(null, SupportMembers.DbFunctions.GetIdentity)));

            whileUpdate.SetValue(mainunit.Identity.Metadata, getidentity);
            whileUpdate.Where = context.Equal(temporaryTable.GetMember(rowindex), new RowIndexFragment(context));
            block.Add(whileUpdate);
            whileTarget = (TableFragment)whileInsert.Target;
            return(repeatfragment);
        }