/// <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); }