Dapper Bulk Insert ID de serie devueltos

Estoy intentando realizar una inserción masiva usando Dapper sobre Npgsql, que devuelve los identificadores de las filas recién insertadas. La siguiente instrucción de inserción se utiliza en mis dos ejemplos:

var query = "INSERT INTO \"MyTable\" (\"Value\") VALUES (@Value) RETURNING \"ID\"";

Primero, intenté agregar una matriz de objetos con una propiedad "Value":

var values = new[] {
    new { Value = 0.0 },
    new { Value = 0.5 }
};
var ids = connection.Query<int>(query, values);

Sin embargo, eso falla con la excepción NpgsqlException: "ERROR: 42703: la columna" valor "no existe". Despues de leeresta pregunta, Pensé que quizás tenga que pasar un objeto DataTable en lugar de una matriz de objetos:

var dataTable = new DataTable();
dataTable.Columns.Add("Value", typeof(double));
dataTable.Rows.Add(0.0);
dataTable.Rows.Add(0.5);
var ids = connection.Query<int>(query, dataTable);

Sin embargo, esto falla con la misma excepción exacta. ¿Cómo puedo realizar una inserción masiva y obtener los identificadores seriales resultantes de Dapper sobre Npgsql?

Noté que la carcasa de la excepción no coincide con el nombre de la columna, pero estoy seguro de que tengo comillas alrededor de la tabla y los nombres de las columnas, así que no estoy seguro de por qué dice "valor" en lugar de "Valor" en el excepción. Solo pensé en mencionarlo en caso de que esté relacionado con el error de alguna manera, ya que es fácil pasar por alto la carcasa.

- EDITAR -

Para aclarar, este es el SQL para crear la tabla

CREATE TABLE "MyTable" (
    "ID" SERIAL PRIMARY KEY,
    "Value" DOUBLE PRECISION NOT NULL
);

Y utilizando las variables "consulta" y "valores" definidos anteriormente, este es el código que funciona por fila:

var ids = new List<int>();
foreach (var valueObj in values) {
    var queryParams = new DynamicParamaters();
    queryParams.Add("Value", valueObj.Value);
    ids.AddRange(connection.Query<int>(query, queryParams));
}

El problema es que necesito poder insertar cientos (quizás miles en el futuro cercano) de filas por segundo en "MyTable", por lo que esperar a que este bucle envíe iterativamente cada valor a la base de datos es engorroso y (supongo, pero todavía tienen que comparar) que consume mucho tiempo. Además, realizo un cálculo adicional sobre los valores que pueden o no dar como resultado inserciones adicionales donde necesito una referencia de clave externa a la entrada "MyTable".

Debido a estos problemas, estoy buscando una alternativa que envíe todos los valores en una sola declaración a la base de datos, para reducir el tráfico de red y la latencia de procesamiento. Una vez más, NO he comparado el enfoque iterativo todavía ... lo que estoy buscando es una alternativa que haga una inserción masiva para poder comparar los dos enfoques uno contra el otro.

Respuestas a la pregunta(1)

Su respuesta a la pregunta