Example #1
0
        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);
        }