¿Cómo diseñaría un repositorio para manejar múltiples estrategias de acceso a datos?

¿Cómo sería un diseño de esqueleto para un repositorio capaz de soportar múltiples capas de base de datos usando ASP.NET MVC y C #? Quiero ver qué aspecto tendría un diseño si admitiera LINQ to SQL y NHibernate. ¿Cómo crearía mi objeto de base de datos y llamaría a un método en mi capa BLL?