You have many options - as you already mentioned, but for true unit testing, you always want to get as close as possible to the actual unit being tested to avoid integration problems with your tests. For database objects, this means using Visual Studio unit test database projects and writing SQL to unit test database objects, or using some third-party SQL testing platform such as DBUnit.
In some cases, you can use Linq-to-SQL to run some data block tests more concisely / easily than SQL can do, but this should be avoided if it is absolutely necessary for true unit testing; Linq-to-SQL (and any other user code) presents integration problems and additional levels, so if you encounter an error, you first need to make sure that it is really an error in your database, and not in your Linq-to- Connection SQL databases, C # code (for example), etc.
KP Taylor
source share