Scope_identity () en comandos sqlclient por lotes

Usualmente uso un procedimiento almacenado cuando inserto registros para asegurarme de obtener el valor de scope_identity () correcto. Tengo un requisito para obtener el campo de identificación de un registro insertado cuando uso SqlClient ahora.

Mi comprensión es que si agrego el comando scope_identity () con el inserto, ¿seguirá estando en el mismo alcance que el comando insertar? Algo como abajo. Aunque es difícil de verificar ... ¿Obtendré el 100% del valor de identificación correcto con esto ...?

(el campo id es un bigint de incremento automático - Servidor SQL)

long newid = 0;

using (SqlConnection conn = new SqlConnection(....))
{
    conn.Open();
    using (SqlCommand comm = new SqlCommand ("insert into .... ; select SCOPE_IDENTITY();", conn))
    {
        SqlDataReader reader = comm.ExecuteReader();
        if (reader.HasRows)
        {
            reader.Read();
            newid = Convert.ToInt64(reader[0]);
        }
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta