protected override DbCommand GenerateInsertCommandWithAutogeneratedField(CommandBuilder commandBuilder, object entity, EntityMetadata entityMetadata) { if (commandBuilder == null) { throw new ArgumentNullException(nameof(commandBuilder)); } if (entityMetadata == null) { throw new ArgumentNullException(nameof(entityMetadata)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } var cmd = this.CreateCommand(); StringBuilder commandText = new StringBuilder(); commandText.Append(string.Format(CultureInfo.InvariantCulture, @" DECLARE {0} NUMERIC(18); BEGIN {0} := {1};", SequenceVariable, GetNextValExpression(entityMetadata.GetFullSequenceName(this.DefaultSchema)))); commandBuilder.AppendInsertStatement(entity, cmd, commandText); commandText.Append(string.Format(CultureInfo.InvariantCulture, @"; :id_seq_$param$ := {0}; END;", SequenceVariable)); IDbDataParameter idp = cmd.CreateParameter(); idp.ParameterName = ":id_seq_$param$"; idp.Direction = ParameterDirection.Output; idp.DbType = DbType.Int64; cmd.Parameters.Add(idp); cmd.CommandText = commandText.ToString(); return(cmd); }
protected override DbCommand GenerateInsertCommandWithAutogeneratedField(CommandBuilder commandBuilder, object entity, EntityMetadata entityMetadata) { if (!string.IsNullOrEmpty(entityMetadata.AutoIncrementFieldName)) { return(base.GenerateInsertCommandWithAutogeneratedField(commandBuilder, entity, entityMetadata)); } if (string.IsNullOrEmpty(entityMetadata.SequenceFieldName)) { throw new InvalidOperationException(entity.GetType().Name + " has no autogenerated field"); } var cmd = commandBuilder.DataService.DbProviderFactory.CreateCommand(); StringBuilder commandText = new StringBuilder(); commandText.Append(string.Format("DECLARE {0} bigint = NEXT VALUE FOR {1};", SequenceVariable, entityMetadata.GetFullSequenceName(this.DefaultSchema))); commandBuilder.AppendInsertStatement(entity, cmd, commandText); commandText.Append(string.Format(";\nSELECT {0} AS AutogeneratedField;", SequenceVariable)); cmd.CommandText = commandText.ToString(); return(cmd); }
protected override DbCommand GenerateInsertCommandWithAutogeneratedField(CommandBuilder commandBuilder, object entity, EntityMetadata entityMetadata) { if (!string.IsNullOrEmpty(entityMetadata.AutoIncrementFieldName)) return base.GenerateInsertCommandWithAutogeneratedField(commandBuilder, entity, entityMetadata); if (string.IsNullOrEmpty(entityMetadata.SequenceFieldName)) throw new InvalidOperationException(entity.GetType().Name + " has no autogenerated field"); var cmd = commandBuilder.DataService.DbProviderFactory.CreateCommand(); StringBuilder commandText = new StringBuilder(); commandText.Append(string.Format("DECLARE {0} bigint = NEXT VALUE FOR {1};", SequenceVariable, entityMetadata.GetFullSequenceName(this.DefaultSchema))); commandBuilder.AppendInsertStatement(entity, cmd, commandText); commandText.Append(string.Format(";\nSELECT {0} AS AutogeneratedField;", SequenceVariable)); cmd.CommandText = commandText.ToString(); return cmd; }
protected override DbCommand GenerateInsertCommandWithAutogeneratedField(CommandBuilder commandBuilder, object entity, EntityMetadata entityMetadata) { var cmd = commandBuilder.DataService.DbProviderFactory.CreateCommand(); StringBuilder commandText = new StringBuilder(); commandText.Append(string.Format(@" DECLARE {0} NUMERIC(18); BEGIN {0} := {1}.nextval;", SequenceVariable, entityMetadata.GetFullSequenceName(commandBuilder.DataService.EntityLiteProvider.DefaultSchema))); commandBuilder.AppendInsertStatement(entity, cmd, commandText); commandText.Append(string.Format(@"; :id_seq_$param$ := {0}; END;", SequenceVariable)); IDbDataParameter idp = cmd.CreateParameter(); idp.ParameterName = ":id_seq_$param$"; idp.Direction = ParameterDirection.Output; idp.DbType = DbType.Int64; cmd.Parameters.Add(idp); cmd.CommandText = commandText.ToString(); return cmd; }