For database related unit testing we use a seperate and stable test database to execute unit tests against.
We also wrap data modification tests in a TransactionScope that is not commited, therefor rolling back the data changes for subsequent test runs. We've found this works really well.