It does in adapter (always) and it also now does in selfservicing since 1.0.2004.2 when you use 2 or more catalogs in the project.
Is there a way to test if it generates a new execution plan? In selfservicing it uses [schema].[tablename], which IMHO should be enough to find back an execution plan. Though without proper measuring I don't know for sure .
(edit). Hmm. I read in BOL indeed that a 'fully' qualified name is a name which has 4 parts, server.catalog.owner.object. Leaving out server, defaults to the current server. I wonder if I leave out catalog will that default to the catalog connected ? The thing is: everything I read talks about 'has a better chance to find back the execution plan', though with a semi qualified name it also should work very well...
(edit2): other reports on google in google groups/sqlserver newsgroup is that using a 2 part name (owner.object) already seems to be enough.
Anyway, I'll add a switch to the generator options in the designer which will allow the user to specify if he/she wants catalog names being generated into the selfservicing code.
(edit3): Ok, I did some tests (select * from master..syscacheobjects shows the live execution plans).
It turns out that select * from customers and select * from dbo.customers aren't seen as the same statements, though when either one of them is executed multiple times, it's plan is re-used, even from different connections. Apparently using more elements leads to more chance to find back the execution plan. Also, if the owner is specified (like I already do), for example dbo.customers, there is no adhoc plan, just compiled and executable plans. I think that makes a big difference, which is thus already the case.