Exemple #1
0
        /// <summary>
        /// 创建通过 IN 主键删除的语句片段。
        /// </summary>
        /// <param name="data">内容对象。</param>
        /// <param name="table">删除表的元数据。</param>
        /// <param name="key">主键元数据。</param>
        /// <param name="values">值列表对象。</param>
        /// <param name="name">指定名称。</param>
        /// <returns>语句片段。</returns>
        internal static DeleteFragment DeleteInKey(this ContentBase data, TableMetadata table
                                                   , ColumnMetadata key, ValueListFragment values, DbName name = null)
        {
            var context   = data.GenerateContext;
            var delete    = new DeleteFragment(context, table, data.TargetName);
            var keyMember = delete.Target.GetMember(key);

            delete.Where = new ScalarFragment(context, values, keyMember)
            {
                Function = SupportMembers.Enumerable.Contains
            };
            return(delete);
        }
        /// <summary>
        /// 生成更新若干关系对象(单个主键)语句。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForRelationDeleteKey(GenerateContext context)
        {
            var data     = (RelationContent)context.Data;
            var metadata = data.Items.Navigate;
            var update   = new UpdateFragment(context, data.Table);

            update.AddSource(update.Target);
            metadata.Pairs.ForEach(
                pair => update.SetValue(pair.ForeignKey, new SimpleFragment(context, "NULL")));
            var member    = new CommitMemberFragment(context, data.Loader, update, data.Table.Keys[0].Member);
            var values    = new ValueListFragment(context, member, data.Items);
            var keyMember = update.Target.GetMember(data.Table.Keys[0]);

            update.Where = new ScalarFragment(context, values, keyMember)
            {
                Function = SupportMembers.Enumerable.Contains
            };
            return(update);
        }
        /// <summary>
        /// 生成删除若干数据对象(单个主键)语句。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForDeleteKey(GenerateContext context)
        {
            var data   = (GenerateDataForDelete)context.Data;
            var block  = new BlockFragment(context);
            var key    = data.Table.Keys[0];
            var member = (CommitMemberFragment)data.CommitObject.GetMember(key);
            var values = new ValueListFragment(context, member, data.Items);
            var name   = data.TargetName;

            foreach (var table in data.GetTables())
            {
                var delete    = new DeleteFragment(context, table, name);
                var keyMember = delete.Target.GetMember(key);
                delete.Where = new ScalarFragment(context, values, keyMember)
                {
                    Function = SupportMembers.Enumerable.Contains
                };
                block.Add(delete);
            }
            return(block);
        }