У меня есть следующий код:
List<foo> collection = getData();
using (OracleConnection conn = _client.GetConnection())
{
await conn.OpenAsync();
using (OracleTransaction transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted))
using (OracleCommand cmd = new OracleCommand())
{
cmd.Transaction = transaction;
cmd.Connection = conn;
cmd.CommandText = @"INSERT INTO SOME.TABLE
(A, B, C)
VALUES
(:A, :B, :C)";
cmd.ArrayBindCount = collection.Count;
cmd.Parameters.Add(":A", OracleDbType.Varchar2, collection.Select(c => c.A).ToArray(), ParameterDirection.Input);
cmd.Parameters.Add(":B", OracleDbType.Varchar2, collection.Select(c => c.B).ToArray(), ParameterDirection.Input);
cmd.Parameters.Add(":C", OracleDbType.Varchar2, collection.Select(c => c.C).ToArray(), ParameterDirection.Input);
try
{
await cmd.ExecuteNonQueryAsync();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw new FailedTransactionException(ex.ToString());
}
}
}
Здесь я могу вставить несколько строк данных из моей коллекции, но мне нужно как-то вернуть идентификаторы вставленных строк. Может ли кто-нибудь указать мне правильное направление или если есть лучший подход для вставки массива объектов и получения идентификаторов обратно.