how does SqlBulkCopy manage to leave the database in an invalid state?
It disables foreign keys on the table you are inserting into.
Yes, this is a horrible default. Be sure to set the option CHECK_CONSTRAINTS
(or CheckConstraints
for SqlBulkCopy
) if you can at all afford it.
It also by default does not fire triggers which is equally terrible for data consistency. The triggers are there for a reason.