public override int Process(string name, List <dynamic> datas) { if (datas == null || datas.Count == 0) { return(0); } if (EntityAdapters.TryGetValue(name, out var metadata) && EntitySessions.TryGetValue(name, out var session)) { switch (metadata.PipelineMode) { default: case PipelineMode.Update: case PipelineMode.Insert: case PipelineMode.InsertAndIgnoreDuplicate: { var insertStmt = session.Prepare(metadata.InsertSql); var batch = new BatchStatement(); foreach (var data in datas) { List <object> values = new List <object>(); foreach (var column in metadata.Columns) { if (column.DataType.FullName != DataTypeNames.TimeUuid) { values.Add(column.Property.GetValue(data)); } else { var value = column.Property.GetValue(data); values.Add(value == DefaultTimeUuid ? TimeUuid.NewId() : value); } } batch.Add(insertStmt.Bind(values.ToArray())); } ; // Execute the batch session.Execute(batch); break; } case PipelineMode.InsertNewAndUpdateOld: { throw new NotImplementedException("Sql Server not suport InsertNewAndUpdateOld yet."); } } } return(datas.Count); }
public override int Process(string entityName, List <DataObject> datas) { if (datas == null || datas.Count == 0) { return(0); } int count = 0; if (EntityAdapters.TryGetValue(entityName, out var metadata) && EntitySessions.TryGetValue(entityName, out var session)) { switch (metadata.PipelineMode) { case PipelineMode.Insert: { var insertStmt = session.Prepare(metadata.InsertSql); var batch = new BatchStatement(); foreach (var data in datas) { data.Remove(Env.IdColumn); var now = DateTime.Now; data.Add("CDate", DateTime.Now); data["run_id"] = DateTime.Now; batch.Add(insertStmt.Bind(data.Values.ToArray())); } ; // Execute the batch session.Execute(batch); // ...you should reuse the prepared statement // Bind the parameters and add the statement to the batch batch break; } case PipelineMode.InsertAndIgnoreDuplicate: { IMapper mapper = new Mapper(session); foreach (var data in datas) { mapper.InsertIfNotExists <DataObject>(data); } break; } case PipelineMode.InsertNewAndUpdateOld: { throw new NotImplementedException("Sql Server not suport InsertNewAndUpdateOld yet."); } case PipelineMode.Update: { break; } default: { var insertStmt = session.Prepare(metadata.InsertSql); IMapper mapper = new Mapper(session); // ...you should reuse the prepared statement // Bind the parameters and add the statement to the batch batch foreach (var data in datas) { mapper.Insert <DataObject>(data); } break; } } } return(count); }