Я использую SQLBulkCopy, в псевдокоде я делаю это:
,
using (var bulk = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity & SqlBulkCopyOptions.KeepNulls))
{
bulk.BatchSize = 25;
bulk.DestinationTableName = "Employee";
bulk.WriteToServer(employeeDataTable);
}
Как я могу указать employeeId во 2-й datable, чтобы он правильно выравнивался с сотрудником, который был вставлен в первый раз? То, как я читаю данные, - это то, что я читаю сотрудника и адрес вместе, поэтому вставка всех сотрудников, а затем возврат и вставка всех адресов - это немного боль.
Мне было интересно, есть ли элегантное решение?
Я не слишком уверен, насколько это элегантно, я думаю, это зависит от вас. Я предполагаю, что у вас есть уникальное поле или комбинация полей, которые уникальны в данных сотрудника.
Если вы создаете промежуточную таблицу на сервере, вы можете вставлять данные, содержащие все данные сотрудника, а также информацию о адресе сотрудника.
Из промежуточной таблицы вставьте данные сотрудника. Затем из промежуточной таблицы присоедините таблицу employee (чтобы получить вновь назначенные идентификаторы) и вставьте данные адреса сотрудника.
Наконец отпустите промежуточную таблицу.
Все по-прежнему ориентировано, поэтому вы должны иметь хорошую производительность.