We created the core architecture, coding patterns, and methodologies. The DAL consisted of Linq to SQL using SQL Metal to manipulate generated entities. Each application could trigger all entities to be created as a pre-build event at compile time.
Our pattern of pre fetching data strictly based on the MVC routes generically saved many hours of developer time. Each method could expect to have the data required for that controller already available.
SQL performance is often an issue when working with ORM's like Linq to Sql. To cover our bases we integrated Mini-Profiler into each web application to easily (and passively) identify performance flaws and re-think how any particular query was written. The end result is a gloriously quick web experience
Performance was also handled globally by making all database interaction transactional at the controller level. Views did not have access to the database so performance intensive EntitySet dot notation entity crawling was not possible.
The reporting engine adhered to the strategy pattern. This allowed us to quickly create new MVC report sets by defining a new strategy when the need arose.