protected virtual bool OnExecute(DataUpsertContext context, SelectStatement statement) { //根据生成的脚本创建对应的数据命令 var command = context.Session.Build(statement); //绑定命令参数 statement.Bind(context, command, context.Data); using (var reader = command.ExecuteReader()) { if (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { var schema = string.IsNullOrEmpty(statement.Alias) ? context.Schema.Find(reader.GetName(i)) : context.Schema.Find(statement.Alias); if (schema != null) { if (schema.Token.Property.IsComplex && schema.Children.TryGet(reader.GetName(i), out var child)) { schema = child; } schema.Token.SetValue(context.Data, reader.GetValue(i)); } } } } return(true); }
private void BuildUpsertion(DataUpdateContext context, object data, IStatementBase master, SchemaMember schema) { var entityType = schema.Parent == null ? context.EntityType : schema.Parent.Token.MemberType; //构建 Upsert 操作上下文 var upsert = new DataUpsertContext( context.DataAccess, schema.Token.Property.Entity.Name, true, data, new Schema(schema.Token.Property.Entity, entityType, schema), context.HasStates ? context.States : null); //构建 Upsert 语句 var statements = context.Source.Driver.Builder.Build(upsert); //将新建的语句加入到主语句的从属集中 foreach (var statement in statements) { master.Slaves.Add(statement); } }