Массовая вставка из списка C # в SQL Server в несколько таблиц с ограничениями внешнего ключа

Я совершенно не в курсе этой проблемы, любая помощь будет высоко оценена:

У меня есть две таблицы, одна таблица основных данных (Table A), другая таблица (Table B) имеет отношение внешнего ключа с несколькими записями (точнее 18) для одной записи вTable A.

Я получаю данные в списке и хочу вставить их в базу данных SQL Server.

Я в настоящее время использую шаблон ниже, но беру14 минут для вставки 100 строк вTable A и соответствующие 18 * 100 строк вTable B.

using (SqlConnection conn = new SqlConnection(conStr))
{
    foreach (var ticket in Tickets)
    {
        sql = string.Format(@"INSERT INTO dbo.Tickets([ColumnA], [ColumnB] ,..." + @")
                              VALUES(@ColumnA, @ColumnB,@ColumnC, @ColumnD, .... +
                            @"SELECT SCOPE_IDENTITY();");

        using (cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.AddWithValue("@ColumnA", (object)ticket.Id ?? DBNull.Value);
            cmd.Parameters.AddWithValue("@ColumnB", (object)ticket.Address ?? DBNull.Value);
            cmd.Parameters.AddWithValue("@ColumnC", (object)ticket.Status?? DBNull.Value);
            ....

            conn.Open();
            TableA_TicketId = Convert.ToInt32(cmd.ExecuteScalar());
        }
    }
} 

я используюSCOPE_IDENTITY() получить последний идентификатор из таблицы A для каждой вставленной записи и использовать его для вставки во вторую таблицу

sql = string.Format(@"INSERT INTO Tickets_Fields ([TableA_TicketId], [FieldName], [Key],[Value]) 
                      VALUES (@TableA_TicketId, @FieldName, @Key, @Value);");

using (cmd = new SqlCommand(sql, conn))
{
    foreach (var customField in ticket.CustomFields)
    {
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@TableA_TicketId", (object)TicketId ?? DBNull.Value);
        cmd.Parameters.AddWithValue("@FieldName", (object)"CustomField" ?? DBNull.Value);
        ...
        cmd.ExecuteNonQuery();
    }
}

conn.Close();

Пожалуйста, подскажите, могу ли я улучшить производительность этого кода любым способом. Или их лучший / быстрый способ сделать это?

Ответы на вопрос(3)

Ваш ответ на вопрос