/// <summary> /// 创值插入值语句。 /// </summary> /// <param name="context">生成上下文。</param> /// <param name="target">插入目标语句。</param> /// <param name="source">用于插入的提交对象语句块。</param> /// <param name="data">插入的数据集合。</param> public InsertValueFragment(GenerateContext context, ISourceFragment target, CommitObjectFragment source, IEnumerable data) : base(context) { Target = target; Data = data; Source = source; _KeyValues = new Dictionary <ColumnMetadata, ISqlFragment>(); }
/// <summary> /// 创建数据对象。 /// </summary> /// <param name="context">生成上下文。</param> /// <param name="operate">当前操作对象。</param> internal GenerateDataForCommit(GenerateContext context, DbObjectsOperateBase operate) : base(context, operate) { if (operate is IConcurrencyCheckOperate concur) { NeedConcurrencyCheck = concur.NeedCheck; } Table = context.Metadata.Table(operate.ClrType); TableCount = Table.InheritSets.Length + 1; Items = operate; Loader = CreateLoader(context, Table); CommitObject = new CommitObjectFragment(context, Loader); }
/// <summary> /// 创建提交内容对象。 /// </summary> /// <param name="context"></param> /// <param name="operate"></param> internal ContentBase(GenerateContext context, DbObjectsOperateBase operate) : base(context, operate) { if (operate is IConcurrencyCheckOperate concur) { NeedConcurrencyCheck = concur.NeedCheck; } Table = context.Metadata.Table(operate.ClrType); Items = operate; Items = operate; Loader = CreateLoader(context, Table); CommitObject = new CommitObjectFragment(context, Loader); }
/// <summary> /// 创建数据对象。 /// </summary> /// <param name="context">生成上下文。</param> /// <param name="operate">当前操作对象。</param> internal GenerateDataForRelation(GenerateContext context, DbRelationOperateBase operate) : base(context, operate) { Items = operate; IsAddRelation = operate.Type == EOperateType.AddRelation; var navigate = operate.Navigate; Source = navigate.Source; Target = navigate.Target; var firstloader = new PropertyValueLoader(context, Source, Source.Keys); var secondloader = new PropertyValueLoader(context, Target, Target.Keys); bool isreverse = false; if (navigate.IsComposite) { var composite = (CompositeNavigateMetadata)navigate; Table = composite.RelationTable; } else { if (navigate.IsForeign == true) { Table = navigate.Source; } else { Target = navigate.Source; Source = navigate.Target; firstloader = new PropertyValueLoader(context, Source, Source.Keys); secondloader = new PropertyValueLoader(context, Target, Target.Keys); Table = navigate.Target; isreverse = true; } if (!IsAddRelation) { secondloader = null; } } Loader = new RelationPropertyValueLoader(firstloader, secondloader) { IsReverse = isreverse }; CommitObject = new CommitObjectFragment(context, Loader); }