Я, может быть, сильно упрощаю вашу задачу, но если вам нужна только последовательность, что-то вроде этого должно работать:
public int GetId(string SequenceName)
{
int result;
using (NpgsqlConnection conn = new NpgsqlConnection(connectionstring))
{
conn.Open();
using (NpgsqlCommand id = new NpgsqlCommand(string.Format(
"select nextval('{0}')", SequenceName), conn))
result = Convert.ToInt32(id.ExecuteScalar());
conn.Close();
}
return result;
}
Вы должны иметь возможность адаптировать это, если у вас есть отдельные объекты подключения и т. Д.
Я могу прыгнуть вперед, но одна из моих любимых функций - это следующая, которая берет коллекцию объектов и присваивает значение каждому полю «Id» в объекте (или какому-либо полю с вашим ID / PK). Возможно, что-то подобное подойдет и для вашей задачи:
public void AssignSequences(string SequenceName, string PropertyName,
IEnumerable<object> DomainObjects)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionstring))
{
conn.Open();
using (NpgsqlTransaction trans = conn.BeginTransaction())
{
using (NpgsqlCommand id = new NpgsqlCommand(string.Format(
"select nextval('{0}')", SequenceName),
conn, trans))
{
foreach (object o in DomainObjects)
{
PropertyInfo p = o.GetType().GetProperty(PropertyName);
p.SetValue(o, Convert.ToInt32(id.ExecuteScalar()));
}
}
trans.Commit();
}
conn.Close();
}
}
Который, если ваше поле Id называется "Id", будет выглядеть примерно так:
AssignSequences("order_line_id", "Id", NewOrders);