Today, for the first time, I experienced timeout errors with netTiers.  The error I was experiencing made it impossible for me to use Sql Server Management Studio to open the locked table in question.  To fix the SSMS locking issues, I followed the advice recommended in the article at http://sqlserverpedia.com/wiki/SQL_Server_Troubleshooting_Tips_and_Tricks#Query_Execution_Settings.  In short, I needed to fine-tune my query execution settings to ensure that the lock timeout was some reasonable number (under Tools | Options… | Query Execution | SQL Server | Advanced).

I have been able to work around the problem (or at least, access the data via a netTiers-generated website) by taking the step outlined at http://community.codesmithtools.com/nettiers/f/16/p/10414/39181.aspx#39181.

Specifically, I ran the following code before any other queries were executed against the database (eg, in your master page or global.asax):

protected void Unlock()
    {
        try
        {
            //Do a dirty read since reading this might cause
            //blocking when modifying the same data that pulls into this
            //Field.  This really isn’t a bug deal since this is just a display name.
            RentalSearch.Data.TransactionManager tmg = RentalSearch.Data.DataRepository.Provider.CreateTransaction();
            tmg.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
            RentalSearch.Entities.Rental someRental = RentalSearch.Data.DataRepository.RentalProvider.Get(tmg, new RentalSearch.Entities.RentalKey(8));
            tmg.Commit();
            //if (someRental != null)
            //    Response.Write(“Hello ” + someRental.Title + “!”);
        }
        catch (Exception) { }
    }
Also, since I’m running under IIS 7 I found this threat to be helpful: http://community.codesmithtools.com/nettiers/f/16/t/4334.aspx. I still don’t fully understand exactly what all the web.config properties do for the sqlnettiersprovider.  But, I settled on the following:
<add name=”SqlNetTiersProvider” type=”RentalSearch.Data.SqlClient.SqlNetTiersProvider, RentalSearch.Data.SqlClient” connectionStringName=”RentalSearch.Data.ConnectionString” providerInvariantName=”System.Data.SqlClient” entityFactoryType=”RentalSearch.Entities.EntityFactory” useEntityFactory=”false” enableEntityTracking=”false” enableMethodAuthorization=”false” useStoredProcedure=”false” defaultCommandTimeout=”30″ />